【发布时间】:2012-01-05 23:04:05
【问题描述】:
如果我理解正确的话,Haskell 中的异常基本上是为了处理 IO monad。至少可以在 IO monad 中捕获异常。
但有时即使是纯函数也可能抛出异常,例如read "..." :: Int(当读取字符串不代表整数时),运算符(!!)(当我们试图让项目超出列表范围时)等等。这是真实的行为,我不否认。但是,我不想更改函数的签名只是为了让它有机会捕获可能的异常,因为在这种情况下,我必须通过调用堆栈更改所有函数的签名。
在 Haskell 中是否有一些模式可以在 IO monad 之外更舒适地处理异常?在这种情况下我应该使用unsafePerformIO 吗?使用unsafePerformIO 来捕获纯函数中的异常有多“安全”?
【问题讨论】:
-
我认为这些异常是“你有错误”的类型,因此不应该首先发现。