3

この質問を読みました。受け入れられた回答の引用は次のとおりです。

このインスタンスはベース 4.3.xx で追加され、ghc 7 に付属しています。一方、Eitherインスタンスを直接使用Eitherすることも、失敗する可能性のあるものを表すために使用している場合は、ErrorTモナド トランスフォーマーを使用する必要があります。

私はEitherこのようなものに使いたい:

> (Left "bad thing happened") >>= \x -> Right (x ++ " ...")
Left "bad thing happened"

そのため、計算の一部が失敗した場合、その部分Leftが返されます。

実際の質問は、モナドErrorTの代わりにモナド変換子を使用する必要があるのはなぜEitherですか? 私は Haskell の初心者であり、モナド トランスフォーマーが少し怖いです。特に、モナド トランスフォーマー内で既にコードを書いている場合はなおさらです。

4

1 に答える 1

5

あなたのケースに当てはまる場合は、使用することをお勧めしEitherます。それが十分でない例はIO、計算の途中で実行したい場合です。

x <- mightReturnLeft
y <- liftIO someIOAction
useXandY x y

その場合、Either十分ではありませんが、ErrorT機能します。

また、の代わりにExceptTErrorTを使用することをお勧めします。ErrorTクラスに依存しているため、使用するのErrorがより厄介になります。

于 2014-10-14T10:53:49.287 に答える