Servantでの例外処理
ファイルの読み込み(基本形で、ここではまだ例外処理を入れていない)
ファイル読み込みに失敗した時の対処 (catch)
*> :t catch catch :: Exception e => IO a -> (e -> IO a) -> IO a
catch
は、catchした時の対処はできるが、戻りの型はIO a
なので、aで正常と異常を区別しなくてはいけない。下の例ではIO String
なので、String
で正常と異常を区別することになるが、異常の状態をなにか特別な文字列表現にしなくてはいけない。これは、実質的に、例外の情報を、呼び出し側に教えることができない。
Exception handing by catch in Servant
ファイル読み込みに失敗した時の対処 (try)
try
はIO (Either a b)
なので、例外の情報をLeft
で呼び出し元に教えることができる。
Exception handling by try in Servant