我正在寻找让我的Haskell程序从外部文件读取设置,以避免重新编译的细微变化。熟悉YAML,我认为这将是一个不错的选择。现在我必须把这两块拼在一起。到目前为止Google并没有非常有帮助。在Haskell中读取YAML
处理从文件中读取和解构YAML的小例子代码将非常感谢。
我正在寻找让我的Haskell程序从外部文件读取设置,以避免重新编译的细微变化。熟悉YAML,我认为这将是一个不错的选择。现在我必须把这两块拼在一起。到目前为止Google并没有非常有帮助。在Haskell中读取YAML
处理从文件中读取和解构YAML的小例子代码将非常感谢。
如果我对可用的软件包感兴趣,那么我会去黑客行为,查看完整的软件包列表,然后在关键字中搜索页面。这样做带来了这些选择(与其他一些不太引人注目的人一起):
和包装器HsSyck叫做YAML光:http://hackage.haskell.org/package/yaml-light
yaml和HsSyck看起来都是相对最近更新的,似乎被其他软件包广泛使用。您可以通过检查反向DEPS看到这一点:
在这两者中,YAML有更多DEPS,但那是因为它是耶索德生态系统的一部分。一个依赖HsSyck的库是yst,我碰巧知道这个库已经被主动维护了,所以这表明HsSyck也很好。
做出选择的下一步是浏览这两个库的文档,并查看哪些文档对我的目的具有更吸引人的api。
在两者中,看起来HsSyck暴露更多的结构,但没有其他的东西,而yaml通过aeson提供的json编码。这表明前者可能更强大,而后者更方便。
另外,YAML和HsSyck实际上都是C库的包装器。 YAML基于[libyaml](http://pyyaml.org/wiki/LibYAML)和HsSyck [Syck](https://github.com/indeyets/syck)。 –
感谢您展示您的评论过程。从哈斯克尔初学者的角度来看,这真是太棒了。 – mindeavor
一个简单的例子:
首先你需要一个test.yml
文件:
db: /db.sql
limit: 100
阅读YAML哈斯克尔
{-# LANGUAGE DeriveGeneriC#-}
import GHC.Generics
import Data.Yaml
data Config = Config { db :: String
, limit :: Int
} deriving (Show, Generic)
instance FromJSON Config
main :: IO()
main = do
file <- decodeFile "test.yml" :: IO (Maybe Config)
putStrLn (maybe "Error" show file)
您是否尝试过使用['yaml'(HTTP:/ /hackage.haskell.org/package/yaml)包? – dflemstr
您需要的替代解决方案是使用bos的配置程序包。 http://hackage.haskell.org/package/configurator –