【发布时间】:2016-11-04 16:45:28
【问题描述】:
是否可以在 ErrorT monad 中累积错误消息?我想累积更多的错误。
【问题讨论】:
-
Either/ExceptT/ErrorT本质上被设计为短路,所以答案是“否”。但是,如果您想累积多个错误,则应该使用不同的 monad/monad 转换器,在这种情况下可能是WriterT。 -
用 WriterT 替换 ErrorT 难吗?此时我有“塔:monad(StateT,ErrorT,IO)
-
从机械难度的意义上说并不难,但从
ErrorT和WriterT的语义截然不同的意义上说,这可能是困难的。ErrorT的全部意义在于它允许计算失败。如果您想累积多个错误,那么这意味着您可能希望计算继续进行。考虑一下这对你的代码有什么影响——你真的能在失败后继续前进吗?如果答案是“有时”,您可能需要混合使用WriterT和ExceptT(顺便说一下,不推荐使用ErrorT,改用ExceptT)。 -
那么“累积不止一个错误”是什么意思?错误的想法是执行立即结束,所以一旦你有一个错误,你就不能再有了。
标签: haskell exception-handling monads either