私はこの質問に対する答えを探していて、このブログ投稿を見つけました。モナドに制約されていないので、それfail
よりも利点があると言われています。error
IO
コード全体fail
の代わりに使用する必要がありますか?で可能な例外を発生させますかerror
?fail
Control.Exception.catch
IO
編集:上記のリンクの更新を見つけました。
これが私のアドバイスです:
IO
すでにコードを使用している場合は、throwIO
fromを介して適切な例外を使用してくださいControl.Exception
。
コードですでにモナドスタックが使用されている場合、まだサポートされていない場合はモナドスタックにエラーを追加し、それらを使用します。
非モナディックコードを使用している場合は、トータル関数を記述します。つまり、可能であれば、パターンを避けerror
て不完全にします。ここで使用fail
すると、コードが不必要に単調になるだけです。例外的な結果が必要な場合は、適切なデータ型(Maybe
またはEither
またはカスタムデータ型など)を使用してください。