为什么ghci不能为EIther找到Monad实例b

ram*_*ion 1 haskell typeclass

所以,已经有几个月了,我有点生疏,但我似乎记得Either b是一个Monad

Prelude Control.Monad Data.Either> return "Hello" :: Either String String

<interactive>:0:1:                                                       
    No instance for (Monad (Either String))                              
      arising from a use of `return'                                     
    Possible fix:                                                        
      add an instance declaration for (Monad (Either String))            
    In the expression: return "Hello" :: Either String String            
    In an equation for `it':                                             
        it = return "Hello" :: Either String String                      
Prelude> Right "Hi" == return "Hi"                                    

<interactive>:0:15:                                                   
    No instance for (Monad (Either a0))                               
      arising from a use of `return'                                  
    Possible fix: add an instance declaration for (Monad (Either a0)) 
    In the second argument of `(==)', namely `return "Hi"'            
    In the expression: Right "Hi" == return "Hi"                      
    In an equation for `it': it = Right "Hi" == return "Hi"           
Run Code Online (Sandbox Code Playgroud)

所以我可能做错了什么,但我不确定是什么.我正在使用GHC 7.2.2.

Dan*_*her 11

截止日期base-4.6.0.0,MonadFunctor实例Either e定义Data.Either并自动从中获取Prelude.

以前,在... base-4.3.*base-4.5*,实例已定义,Control.Monad.Instances并且不会自动可用.在此之前,部分与之同时,有一个

instance Error e => Monad (Either e) where
    ...
Run Code Online (Sandbox Code Playgroud)

中所定义Control.Monad.Errormtl-1.*,并且在Control.Monad.Trans.Error从所述transformers包.Error如果它们与a一起使用,这些模块仍然有条件地提供实例(现在没有约束)base < 4.3.