On Thursday 24 March 2005 04:14, Thomas Hallgren wrote:
> Iavor Diatchki wrote:
> >Just to avoid confusion I think the suggestions were:
> >class Functor f => Monad f where ...
> >class Functor f => FunctorM f where ...
> >
> >I know the first one differs from the Haskell report, but perhaps
> > this is a flaw in the library design that should be fixed.
>
> 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...
Robert Will has written a fully specified proposal for this. He calls it "delayed method definition", see http://www.stud.tu-ilmenau.de/~robertw/dessy/fun/, sections 4.3.1 and 4.3.2.
Looks like a really good idea to me.
Ben