作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个接受一些参数并返回 IO (Either String String)
的函数, 说
testEither :: Int -> IO (Either String String)
testEither 0 = return (Left "we got an error")
testEither _ = return (Right "everything is ok")
writeFile fileName
.预期行为:如果我绑定(bind)
testEither 0
至
writeFile "test.txt"
,我失败了
Left ...
, 如果我用
testEither 1
调用它, 我得到
everything is ok
在文件
test.txt
.
IO (Either String ())
,但我可能错了。
最佳答案
您可以使用 ErrorT 1 个 monad 转换器,在 IO
之上为您提供纯粹的错误处理单子(monad):
import Control.Monad.Error
testEither :: Int -> IO (Either String String)
testEither 0 = return (Left "we got an error")
testEither _ = return (Right "everything is ok")
main = runErrorT $ do
result <- ErrorT $ testEither 0
lift $ writeFile "test.txt" result
ErrorT
似乎已替换为
ExceptT
在
mtl
的最新版本中,但功能应该相似。
关于haskell - 如何用 Either 数据类型编写 writeFile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25488530/
我是一名优秀的程序员,十分优秀!