On Tue, Jun 29, 2010 at 6:13 PM, Claus Reinke <claus.reinke@talk21.com> wrote:
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
Claus
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'.