I was under the impression that there was an instance for Either a somewhere, but I can't seem to find it. I have tried importing Control.Monad, Control.Monad.Instances and Data.Either as shown
module Main where
import Control.Monad
import Data.Either
import Control.Monad.Instances
test :: [Either a b] -> Either a [b]
test = sequence
main = return ()
but ghc tells me that it could not deduce (Monad (Either a)). Adding
instance Monad (Either a) where
return = Right
Right b >>= f = f b
Left a >>= _ = Left a
makes the code compile, but this instance declaration seems so general that it doesn't make sense to me if it isn't already out there in some standard module. If it is, where should I look to find it, and if it isn't, is there then a reason for this?
-------------- EDIT ---------------
Be aware that I now think that the answer by user31708 below ("As of base 4.6, the instance is in Data.Either itself.") is currently the correct answer. I am not sure of the proper protocol of reassigning the selected answer in this case, where the selected answer was the correct answer at the time that the question was asked, so I have left it as it is. Please correct me, if there is another guideline for this.
As of base 4.6, the instance is in
Data.Either
itself.There is not an instance for
Either a
, but there is forEither String
inControl.Monad.Error
. (Actually, it's forError e => Either e
, IIRC).This instance has been added in
base 4.3.x.x
, which comes withghc 7
. Meanwhile, you can use theEither
instance directly, or, if you are usingEither
to represent something that may fail you should useErrorT
monad transformer.I believe there's something in
Control.Monad.Error
- don't have anything to check, though.