我已阅读this question。以下是对已接受答案的引用:
此实例已添加到基础4.3.xx中,它随ghc 7一起提供。同时,您可以直接使用
Either
实例,或者,如果您使用Either
来表示可能的内容你应该使用ErrorT
monad transformer。
我想将Either
用于这样的事情:
> (Left "bad thing happened") >>= \x -> Right (x ++ " ...")
Left "bad thing happened"
因此,如果计算的一部分失败,则返回其Left
。
实际问题是:我为什么要使用ErrorT
monad变换器而不是Either
monad?我是Haskell的新手,我有点害怕monad转换器,特别是当我已经在其中编写代码时。
答案 0 :(得分:5)
如果适合您的情况,我建议您使用Either
。 不足够的一个例子是你想在计算过程中执行一些IO
,例如:
x <- mightReturnLeft
y <- liftIO someIOAction
useXandY x y
在这种情况下,Either
是不够的,但ErrorT
可行。
另外,我建议使用ExceptT代替ErrorT
。 ErrorT
依赖于Error
类,这使得使用它更加笨拙。