[Haskell] PROPOSAL: class aliases
David Menendez
zednenem at psualum.com
Thu Oct 13 19:09:06 EDT 2005
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 <zednenem at psualum.com> | "In this house, we obey the laws
<http://www.eyrie.org/~zednenem> | of thermodynamics!"
More information about the Haskell
mailing list