6

我一直在寻找这个问题的答案并找到了这篇博文。它说它fail有优势,error因为它不受IO单子的限制。

我应该使用fail而不是error全部使用我的代码吗?是否会fail引发Control.Exception.catch异常IO

编辑:我找到了上面链接的更新

4

1 回答 1

8

这是我的建议:

  • 如果您已经在代码中,请通过fromIO使用适当的异常。throwIOControl.Exception

  • 如果您的代码已经使用了 monad 堆栈,如果它不支持它,则将错误添加到您的 monad 堆栈,然后使用它们。

  • 如果您使用的是非单子代码,请编写总函数。即,error如果可以的话,避免和不完整的模式。在这里使用fail只会迫使您的代码不必要地单调。如果您需要异常结果,请使用适当的数据类型(例如MaybeorEither或自定义数据类型)。

于 2012-12-14T12:31:42.737 回答