バックグラウンド
私は、トランスフォーマーのスタックで構築されたモナドを使用しており、そのうちの 1 つは ErrorT です。したがって、私のモナドはMonadError
クラスを実装しthrowError
、有効なステートメントです。特定の条件を満たしたときだけスローしてエラーにしたい。私は次のことをする傾向があります。
if badCondition
then throwError "You did a bad, bad thing..."
else return ()
doGoodThings
[...]
これを見ると、次のように一般化できると思います。
throwErrorWhen :: (MonadError e m) => Bool -> e -> m ()
throeErrorWhen cond err = if cond then throwError e else return ()
実際、これは非常に明白なようで、MonadError ライブラリではないことに驚きました。
質問:
何らかの条件が満たされた場合にのみエラーを発生させるより良い/より正しい方法はありますか?