我正在尋找讓我的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 –