2
IO String関数ですべての例外をキャッチしたい。私はこのコードを実行すると:Haskellの()とは異なるIOで例外をキャッチできないのはなぜですか?
import Control.Exception.Base
handler :: SomeException -> IO String
handler _ = return "Gotta catch'em all!"
boom :: IO String
boom = return (show (3 `div` 0))
get :: IO String
get = boom `catch` handler
main :: IO()
main = do
x <- get
print x
を私は
exctest: divide by zero
を取得しかし、このコードは動作します:
import Control.Exception.Base
handler2 :: SomeException -> IO()
handler2 _ = print "Gotta catch'em all!"
boom2 :: IO()
boom2 = print $ show (3 `div` 0)
main :: IO()
main = do
boom2 `catch` handler2
結果
> Gotta catch'em all!
で、私は最初の例ではブームを変更した場合〜
boom = error "ERR"
例外はありません。なぜこのように振る舞うのですか?最初の例で例外をキャッチするにはどうすればよいですか?