我已经阅读了这个问题,以下是被接受答案的引用:
这个实例已经在 base 4.3.x.x 中添加,该版本与 ghc 7 一起发布。同时,您可以直接使用
Either
实例,或者如果您正在使用Either
表示可能失败的内容,则应使用ErrorT
Monad 转换器。
我想要像这样使用 Either
:
> (Left "bad thing happened") >>= \x -> Right (x ++ " ...")
Left "bad thing happened"
因此,如果计算的一部分失败,将返回它的Left
。
实际问题是:为什么我应该使用ErrorT
单子变换器而不是Either
单子?我是Haskell的新手,当我已经在其中编写代码时,我有点害怕单子变换器,特别是。
EitherT
变换器吗?ExceptT
像EitherT
一样工作吗? - Mark KarpovEitherT
,因为它已经存在更长时间了。这两个在功能上是等效的。我在我的答案中引用了ExceptT
,因为它也来自于transformers
,并且是ErrorT
被弃用的替代方案。 - Michael Snoyman