m 可以替换为 Either String,方法是替换 pure = Right 和 fail = Left。但是,由于 Either String -6ren">
gpt4 book ai didi

haskell - "Either String"有新类型吗?

转载 作者:行者123 更新时间:2023-12-05 07:13:55 24 4
gpt4 key购买 nike

forall m。 MonadFail m => m 可以替换为 Either String,方法是替换 pure = Rightfail = Left。但是,由于 Either StringMonadFail 实例不会很快出现(discussion),我想我将使用新类型的 Either String 如果我想将 MonadFailEither 结合使用。

也就是说,我相信有很多人已经想到了同样的想法。有没有已经定义了这种新类型的包?我尝试使用谷歌搜索,但没有成功。

(用例:在纯代码中使用 iso8601ParseM,即在(新类型)Either 中。)

最佳答案

在我看来这是一个很好的问题。以至于我决定编写一个库 FailT解决了这个精确的问题。以下是如何使用它来回答这个问题:

λ> import Data.Time (UTCTime)
λ> import Data.Time.Format.ISO8601 (iso8601ParseM)
λ> import Control.Monad.Trans.Fail.String (runFail)
λ> runFail $ iso8601ParseM "2023-01-16T22:14:00Z" :: Either String UTCTime
Right 2023-01-16 22:14:00 UTC
λ> runFail $ iso8601ParseM "2023-01-16" :: Either String UTCTime
Left "no parse of \"2023-01-16\""

这是一篇博文 Fail with class详细介绍了 FailT 的用途和其他功能图书馆。事实上,该博客文章提到并链接到这个特定问题作为激励示例之一。

关于haskell - "Either String"有新类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60058178/

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