どこかにどちらかのインスタンスがあるような印象を受けましたが、見つからないようです。示されているように、Control.Monad、Control.Monad.Instances、およびData.Eitherをインポートしようとしました
module Main where
import Control.Monad
import Data.Either
import Control.Monad.Instances
test :: [Either a b] -> Either a [b]
test = sequence
main = return ()
しかし、ghcはそれが推論できなかったと私に言います(モナド(どちらか))。追加する
instance Monad (Either a) where
return = Right
Right b >>= f = f b
Left a >>= _ = Left a
コードをコンパイルしますが、このインスタンス宣言は非常に一般的であるため、標準モジュールにまだ存在していない場合は意味がありません。もしそうなら、どこでそれを見つけるべきですか、そうでなければ、これには理由がありますか?
- - - - - - - 編集 - - - - - - - -
以下のuser31708による回答(「ベース4.6の時点では、インスタンスはData.Either自体にあります。」)が現在正しい回答であると私が考えていることに注意してください。この場合、選択された回答が質問された時点で正解であった場合、選択された回答を再割り当てする適切なプロトコルがわからないため、そのままにしておきます。これに関する別のガイドラインがある場合は、私を訂正してください。