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
