【发布时间】:2018-05-02 14:09:03
【问题描述】:
我正在尝试使用 monad 读取带有 haskell 的 INI 文件。
这是我的代码:
import Control.Monad
import Data.Ini
main = do
config <- readIniFile "configs/config.ini"
port <- (config >>= lookupValue "NETWORK" "port")
port >>= putStrLn
在我有限的理解中,config 和 port 的类型是 Either。如何将Either 值与IO 操作一起使用
【问题讨论】:
-
您知道如何使用
Either值没有IO操作吗? -
我尝试了使用
case of语法,如下所示:pastebin.com/nquCFvck,它似乎有效。现在尝试将bind用于学习目的 -
不,这是(或者更确切地说:a)正确的解决方案。您可以改用
either或fromRight函数,但我认为这不会是一个重大改进。请注意,如果您有Left分支终止程序(出现错误或异常)并且正确的分支返回值,则不需要继续嵌套。 -
您不能为此使用 bind:粗略地说,如果将其重新插入到相同的 monadic 上下文中,bind 会从它的 monadic 上下文中取出一些东西。你不能从
Either a中取出一些东西,然后用bind 把它放到IO中。
标签: haskell