Udo Stenzel writes: > Simon Peyton-Jones wrote: > > I've considered this before, but never done anything about it > > because superclasses are so close. Specifically, what is the > > difference between > > > > (i) class (C a, D a) => CD a > > and > > (ii) class alias CD a = (C a, D a) > > > > Note that (i) is Haskell 98. > > I was about to suggest almost exactly the same. In particular, John's > proposal could be decomposed into three parts: > > 1. Allow instance declarations to define methods of superclasses. > These are simply converted into the appropriate instance > declarations for the superclasses. > > 2. Allow class declarations to give defaults for methods in > superclasses. Together with (1) they are used in the obvious way. > > 3. Allow empty instance declarations to be implicitly generated. > > > As a nice side effect, (1) and (2) together would allow us to cleanly > get rid of the fmap/liftM annoyance: > > *> class Functor f where { fmap :: ... } > *> class Functor m => Monad m where { fmap = liftM }
This can also get us into trouble. Consider, class Functor f where fmap :: ... class Functor m => Monad m where { fmap = liftM; ... } class Functor d => Comonad d where { fmap = liftD; ... } The Id functor is an instance of Monad and Comonad; what happens to the fmap definition? > If the instance for every type were allowed, Foo and Bar would be > indistinguishable from true synonyms. Further, if classes with no > methods have no use currently, this "universal instance" could be > compiler generated whenever a class without methods is declared. Or > the empty class may be treated as a synonym, if that's simpler. Does > this make any sense? I don't know that method-less classes have *no* value. You could use them to make additional claims about a type. For example, class Monoid m where { ... } class CommutativeMonoid m where {} The idea being that instances of CommutativeMonoid satisfy additional laws. -- David Menendez <[EMAIL PROTECTED]> | "In this house, we obey the laws <http://www.eyrie.org/~zednenem> | of thermodynamics!" _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell