#4159: move Monad and MonadFix instances for Either from mtl to
claus.reinke at talk21.com
Tue Jun 29 18:13:07 EDT 2010
>>> The proposal is to move the Monad and MonadFix instances for Either
>>> (currently in the mtl package) to Control.Monad.Instances and
>>> Control.Monad.Fix respectively (both in the base package). The Monad
>>> instance is still an orphan, to retain Haskell 98 compatibility, but the
>>> MonadFix instance is together with its class. The Error constraint is
>>> removed from both instances, and the default definition of fail is used.
>> -1, because the default definition of fail is error, which would
>> render the Monad instance useless (unless I'm missing something?).
> You would just use Left instead of 'fail' if you want to show failure in
> an Either value.
a) you are suggesting to bypass a method of the proposed Monad
instance because it isn't useful, I am suggesting not to define a
Monad instance with unusable methods
b) desugaring of pattern-match failure in Monads calls fail, not Left
PS. I just remembered that I have used 'Monad (Either a)', for
'a' other than String (a parser with error information in addition
to plain error message). That application didn't use
Control.Monad.Errror or Control.Monad.Instances - it could
have been made to fit the current Control.Monad.Error design
but not the proposed design, because it relied on
'fail s `mplus` return x == return x'.
More information about the Libraries