On Thu, Mar 24, 2005 at 08:40:14AM -0000, Simon Peyton-Jones wrote:
> [Thomas Hallgren wrote:]
> | > Yes, I think this should be fixed, and perhaps it could be done in a
> | > backward compatible way? If classes were allowed to declare default
> | > methods for superclasses, then you could have
> | >
> | >     class Functor f where fmap :: ...
> | >     class Functor m => Monad m where
> | >        ...the usual stuff...
> | >        fmap = liftM
> | >
> | > Then declaring
> | >
> | >     instance Monad T where ...
> | >
> | > for some T, would implicitly introduce an instance Functor T, if it
> is
> | > not defined explicitly...
> 
> It seems overkill to have a whole new language feature to deal with one
> library issue.  It would take a bit of implementing too, and it's not
> clear to me what the specification is.  For example, what if Functor T
> *is* defined explicitly, but in a later module?

It's not just here -- this would make lots of fairly fine-grained class
hierarchies a lot less painful.  But I agree that there's a cross-module
problem.  It may be necessary to require that instances of classes
linked in this way be defined in the same module, but that wouldn't be
backwards compatible either.
_______________________________________________
Haskell mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to