使用ErrorT累积错误

时间:2016-11-04 16:45:29

标签: haskell exception-handling monads either

是否可以在ErrorT monad中累积错误消息?我想积累更多的错误。

1 个答案:

答案 0 :(得分:7)

您可以使用变形金刚的Control.Applicative.Lift中的Errors申请

ghci> import Control.Applicative
ghci> import Control.Applicative.Lift
ghci> failure ['a'] *> pure () <* failure ['b']
Other (Constant "ab")

返回错误列表(如果有)或成功结果。

这种类型通常被称为&#34;验证&#34;应用型。 Hackage上有other implementations个版本。一个可靠的改进是将失败容器的要求放宽为Monoid,同时允许Semigroup

请注意,Errors类型不是Monad。但您可以使用Applicative将其与其他Data.Functor.Compose结合使用。

MonadPlus的{​​{1}}实例有一个相关但不相同的行为:它会返回第一个成功,如果有,或者是错误列表:

ExceptT