在 Haskell 中读取一个 ini 文件
Read an ini file in Haskell
我正在尝试读取 Haskell 中的一个简单 .ini 文件以用作我的应用程序的配置。我不是 Haskell 方面的专家,所以我可能遗漏了一些简单的东西。
到目前为止,我的简化代码如下所示
{-# LANGUAGE OverloadedStrings #-}
import Data.Ini
main :: IO ()
main = do
config <- readIniFile "config.ini"
p <- lookupValue "NETWORK" "port" config
...
编译器给我这个错误
无法将预期类型 'Ini' 与 lookupValue 的第三个参数中的实际类型 'Either String Ini' 匹配,即 'config'.
我查看了 Data.Ini 的 docs,但找不到任何有关如何使用 Api 的示例。
任何帮助将不胜感激。
问题是 readIniFile
returns 一个 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
returns 一个 IO (Either String Ini)
,但是 lookupValue
的第三个参数必须是一个 Ini
(而且它 returns一个Either String Text
)。您需要使用 case 语句来检索 ini:
result <- readIniFile "config.ini"
p <- case result of
Left str -> Left str
Right ini -> lookupValue "NETWORK" "port" ini
看了源码,Left判别式好像是用来报错的
如果你想更高级,你可以使用 Either 作为 monad: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 文件以用作我的应用程序的配置。我不是 Haskell 方面的专家,所以我可能遗漏了一些简单的东西。
到目前为止,我的简化代码如下所示
{-# LANGUAGE OverloadedStrings #-}
import Data.Ini
main :: IO ()
main = do
config <- readIniFile "config.ini"
p <- lookupValue "NETWORK" "port" config
...
编译器给我这个错误
无法将预期类型 'Ini' 与 lookupValue 的第三个参数中的实际类型 'Either String Ini' 匹配,即 'config'.
我查看了 Data.Ini 的 docs,但找不到任何有关如何使用 Api 的示例。
任何帮助将不胜感激。
问题是 readIniFile
returns 一个 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
returns 一个 IO (Either String Ini)
,但是 lookupValue
的第三个参数必须是一个 Ini
(而且它 returns一个Either String Text
)。您需要使用 case 语句来检索 ini:
result <- readIniFile "config.ini"
p <- case result of
Left str -> Left str
Right ini -> lookupValue "NETWORK" "port" ini
看了源码,Left判别式好像是用来报错的
如果你想更高级,你可以使用 Either 作为 monad: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"))