错误和失败之间有什么区别?

时间:2012-12-14 12:16:53

标签: haskell error-handling

我一直在寻找这个问题的答案,并找到this blog post。它说fail优于error,因为它不受IO monad的限制。

我应该在代码中使用fail代替error吗? fail中有Control.Exception.catchIO个例外情况吗?

编辑:我找到了上面链接的an update

1 个答案:

答案 0 :(得分:7)

这是我的建议:

  • 如果您已使用IO代码,请通过throwIO的{​​{1}}使用正确的例外情况。

  • 如果您的代码已经使用了monad堆栈,如果它已经不支持monad堆栈,请添加错误,并使用它们。

  • 如果您使用非monadic代码,请编写总函数。即,如果可以,请避免使用Control.Exception和不完整的模式。在这里使用error只会强制您的代码不必要的monadic。如果您需要特殊结果,请使用正确的数据类型(例如failMaybe或自定义数据类型)。