我读过这个问题。以下是被接受的答案的引用:
这个实例已经添加到Base4.3.x.x中,这是ghc 7附带的。同时,您可以直接使用
Either实例,或者,如果您使用Either来表示可能失败的东西,则应该使用ErrorTmonad转换器。
我想用Either来做这样的事情:
> (Left "bad thing happened") >>= \x -> Right (x ++ " ...")
Left "bad thing happened"因此,如果计算的一部分失败,则返回其Left。
实际问题是:为什么我应该使用ErrorT单台转换器而不是Either单机?我是Haskell的新手,我有点害怕单台变压器,尤其是当我已经在里面写代码的时候。
发布于 2014-10-14 10:53:49
如果适合您的情况,我建议使用Either。如果您想在计算过程中执行一些IO,例如:
x <- mightReturnLeft
y <- liftIO someIOAction
useXandY x y在这种情况下,Either是不够的,但是ErrorT可以工作。
另外,我建议使用ExceptT而不是ErrorT。ErrorT依赖于Error类,这使得使用起来更加困难。
https://stackoverflow.com/questions/26357269
复制相似问题