是否可以在ErrorT monad中累积错误消息?我想积累更多的错误。
答案 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