阅读Haskell中的ini文件
我正在尝试阅读Haskell中的简单.ini文件,以用作我的应用程序的配置。我不是Haskell的专家,所以我可能会错过简单的东西。阅读Haskell中的ini文件
到目前为止,我的简化代码如下所示
{-# LANGUAGE OverloadedStrings #-} import Data.Ini
main :: IO()
main = do
config <- readIniFile "config.ini"
p <- lookupValue "NETWORK" "port" config
...
编译器给了我这个错误
无法匹配,期望型“燕丽”与实际类型的“任意字符串燕丽”在第三个参数lookupValue即'config'。
我看着Data.Ini的docs,但我找不到如何使用Api的任何示例。
任何帮助将非常感激。
回答:
问题是readIniFile
返回IO (Either String Ini)
。并且lookupValue
预计值为Ini
。因此,您必须从Either
中解开ini值并提供适当的错误处理。
我敢肯定,有一个更单一和富有表现力的方式来解决这个问题,但这里有一个解决方案。
{-# LANGUAGE OverloadedStrings #-} import Data.Ini
main :: IO()
main = do
config <- readIniFile "config.ini"
case config of
Right ini -> do
let p = lookupValue "NETWORK" "port" ini
putStrLn $ case p of
Left s -> s
Right t -> show t
Left s -> putStrLn s
回答:
读取文档,readIniFile
返回IO (Either String Ini)
,但lookupValue
第三个参数必须是Ini
(并返回一个Either String Text
)。您需要使用case语句来检索ini:
result <- readIniFile "config.ini" p <- case result of
Left str -> Left str
Right ini -> lookupValue "NETWORK" "port" ini
读取源代码时,左判别式似乎用于报告错误消息。
如果你想更大胆的尝试,你可以使用一个单子:https://hackage.haskell.org/package/base-4.10.1.0/docs/Data-Either.html#t:Either
result <- readIniFile "config.ini" p <- (result >>= (lookupValue "Network" "port"))
以上是 阅读Haskell中的ini文件 的全部内容, 来源链接: utcz.com/qa/266002.html