ファイルから値を読み取って、発生する可能性のあるすべての例外をキャッチしようとしています ( 「許可よりも許しを求める方が簡単」という考え方で)。Prelude.read: no parse
ただし、例外をキャッチするのに問題があります。私の知る限り、すべての例外の「スーパータイプ」である明示的な型でtry
定義したすべての例外をキャッチする必要があることを伝えるには:tryAny
SomeException
import Control.Exception (try,SomeException)
tryAny :: IO a -> IO (Either SomeException a)
tryAny = try
IOエラーをtryAny
キャッチできるようです:
> tryAny (fromFile "nonExistingFileName")
Left nonExistingFileName: openFile: does not exist (No such file or directory)
ただし、読み取りエラーはキャッチされません。
> tryAny (return ((read "a")::Int))
Right *** Exception: Prelude.read: no parse
すべての例外をキャッチするにはどうすればよいですか?