私は数種類の例外を投げる計算をしています。 1つ1つを評価せずにdoブロック内でそれらを連鎖させ、結果をEither ex result
としてパターン一致させるにはどうすればよいですか?チェーンExceptTと異なるLeft in doブロック
type IntComp ex = ExceptT ex IO Int
local :: IntComp IOException
local = ExceptT $ map length <$> tryIO (readFile "file")
web :: IntComp WebException
web = ExceptT $ map length <$> tryAny (getWebsite "file")
comp :: (Exception ex) => IntComp ? -> IntComp ? -> IntComp ?
comp local web = ExceptT $ do
res1 <- local
res2 <- web
return (res1 + res2)
それらはすべてException
のインスタンスを持っているので、私は同様の方法でcomp
関数を記述するためにいくつかの方法がなければならないと思うだろうか?あなたは2つの例外タイプEOne
とETwo
を持っている場合は
、これはもっと面倒なことになるだろう。 –
私は参照してください。読んだ後、私は 'MonadThrow'の機能をエミュレートしようとしていますか? – TomTom
このような簡単な例では、['withExceptT'](https://hackage.haskell.org/package/transformers-0.5.2.0/docs/Control-Monad-Trans-Except.html#v:withExceptT)を一方または両方の例外のタイプを変更します - 'withExceptT Left'と' withExceptT Right'は '単純な'選択肢です。 – user2407038