#4159: move Monad and MonadFix instances for Either from mtl to base

Simon Marlow marlowsd at gmail.com
Thu Jul 1 06:35:24 EDT 2010

On 30/06/2010 16:44, Henning Thielemann wrote:
> On Wed, 30 Jun 2010, Tyson Whitehead wrote:
>> Perhaps it could be pushed it into it's own type class, which would then
>> required by the do notation? Exactly like mdo required MonadFix. I
>> understand there was one called MonadZero for this at some time?
> I assume that there is no need to change the compiler, just the library,
> or even just the imports, since GHC will simply insert 'fail' where
> necessary and this automatically introduces the type class constraints
> that 'fail' has. If a custom 'fail' from a new MonadError class is in
> scope, then MonadError will be required for the whole expression that a
> 'do' block represents.

I believe the reason that fail was moved into the Monad class was that 
having constraints pop up unpredictably just because you added a pattern 
match was ugly and inconvenient (rather like the rationale for dropping 
the Data constraint on seq, and the similar problem with implicit 
parameters).  If you add another constructor to a single-constructor 
data type, do all your pattern matches suddenly generate new 
constraints, requiring you to fix all your type signatures?

I don't know all the ins and outs of the discussion here, but before 
proposing to reverse this decision someone should do a careful 
assessment of the prior rationale and results of subsequent experience.


More information about the Libraries mailing list