我希望让我的Haskell程序从外部文件中读取设置,以避免重新编译以进行微小更改.熟悉YAML,我认为这是一个不错的选择.现在我必须把两件放在一起.到目前为止,谷歌并没有提供太多帮助.
一个处理从文件中读取和解构YAML的示例代码将非常受欢迎.
scl*_*clv 25
如果我对可用的软件包感兴趣,我会去hackage,查看完整的软件包列表,然后只搜索关键字.这样做会带来这些选择(以及其他一些不太引人注目的选择):
还有一个名为yaml-light的HsSyck包装器:http://hackage.haskell.org/package/yaml-light
yaml和HsSyck最近都看起来更新了,并且似乎被广泛使用的其他软件包使用.你可以通过检查反向deps来看到这个:
在这两个中,yaml有更多的deps,但这是因为它是yesod生态系统的一部分.一个依赖于HsSyck的库是yst,我碰巧知道它是积极维护的,因此这向我表明HsSyck也很好.
我做出选择的下一步是浏览两个库的文档,看看哪个具有更吸引人的api用于我的目的.
在这两个中,看起来HsSyck暴露了更多的结构,但没有多少,而yaml通过aeson提供的json编码.这向我表明,前者可能更强大,而后者更方便.
小智 10
一个简单的例子:
首先你需要一个test.yml文件:
db: /db.sql
limit: 100
Run Code Online (Sandbox Code Playgroud)
在Haskell中阅读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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4049 次 |
| 最近记录: |