John

Replying just to you to avoid spamming everyone.

| in particular,
| 
| (CD a) => a and (C a,D a) => a are distinct types. this means that
| you cannot use the aliases as abreviations or alternate names, which
is
| a very nice side effect. with fine grained class hierarchies, type
| signatures get big fast. having a shorthand is very nice.

I don't agree.  What do you mean by "distinct types"?  In H98 both of
these are ok:

        f :: CD a => ty
        f = ...code...

        g :: (C a, D a) => ty
        g = f
and
        f :: (C a, D a) => ty
        f = ...code...

        g :: (CD a) => ty
        g = f

That is, the two types are interchangeable.

| Another illustrative example is one that combines aliases with
| superclasses.
| 
| class alias Num a = Show a => (Additive a, Multiplicative a)
| 
| now, Show is a superclass, but Num is an alias for Additive and
| Multiplicative.

Yes, this part really confused me.  I didn't understand what it meant.
Here's my attempt to summarise what I think you are proposing.  (This
summary might be useful to add to your note.)

(1a) If I have 
        f :: Num a => ...
then I can use any of the class ops of Show, Additive, Multiplicative in
the body of f.

(1b) Dually, a call of f can be satisfied if (Show, Additive,
Multiplicative) are all available (or Num of course).

(2a) I can declare an instance of Num 
* either by giving separate instances for Show, Additive,
Multiplicative; 
* or by giving a separate instance for Show, and an instance for Num
itself

(2b) If a type T is an instance of Additive, then it's an error to also
give a Num instance, even if the instance only gives the methods for
Multiplicative.

(3) In the class decl for Num I can override the default methods for
Additive, Multiplicative.  These new default methods will be used (only)
if I give an instance decl for Num.


Here, (1a,b) are satisfied by H98 superclasses, whereas (2a) and (3) are
not.  Are there any points I've missed in this list?

Simon
_______________________________________________
Haskell mailing list
Haskell@haskell.org
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to