Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我一直在寻找这个问题的答案并找到了这篇博文。它说它fail有优势,error因为它不受IO单子的限制。
fail
error
IO
我应该使用fail而不是error全部使用我的代码吗?是否会fail引发Control.Exception.catch异常IO?
Control.Exception.catch
编辑:我找到了上面链接的更新。
这是我的建议:
如果您已经在代码中,请通过fromIO使用适当的异常。throwIOControl.Exception
throwIO
Control.Exception
如果您的代码已经使用了 monad 堆栈,如果它不支持它,则将错误添加到您的 monad 堆栈,然后使用它们。
如果您使用的是非单子代码,请编写总函数。即,error如果可以的话,避免和不完整的模式。在这里使用fail只会迫使您的代码不必要地单调。如果您需要异常结果,请使用适当的数据类型(例如MaybeorEither或自定义数据类型)。
Maybe
Either