gpt4 book ai didi

haskell - 如何用 Either 数据类型编写 writeFile?

转载 作者:行者123 更新时间:2023-12-01 07:59:00 25 4
gpt4 key购买 nike

我有一个接受一些参数并返回 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 0writeFile "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

1 ErrorT似乎已替换为 ExceptT mtl 的最新版本中,但功能应该相似。

关于haskell - 如何用 Either 数据类型编写 writeFile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25488530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com