如果我理解正确的话,在 Haskell 中,异常主要用于处理 IO monad 中的异常。至少 IO monad 内部的异常可以被捕获。
但是有时候,即使是纯函数也可能会抛出异常,例如当读取的字符串不能表示整数时,
在 Haskell 中有没有一些模式可以更轻松地处理异常,而不是只能在 IO monad 中处理?也许我应该在这种情况下使用
但是有时候,即使是纯函数也可能会抛出异常,例如当读取的字符串不能表示整数时,
read "..." :: Int
(),操作符 (!!)
(当我们尝试获取列表范围之外的元素)等等。这是真实的行为,我不否认。然而,我不想仅仅为了捕获可能的异常而改变函数签名,因为在这种情况下,我必须在调用栈上更改所有函数的签名。在 Haskell 中有没有一些模式可以更轻松地处理异常,而不是只能在 IO monad 中处理?也许我应该在这种情况下使用
unsafePerformIO
?在纯函数中使用 unsafePerformIO
来捕获异常有多"安全"?