
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