> Consider the function
>
> t :: T a => T a -> T a
>
> I think that it's far from clear what each of the T's mean!
> Worse, in Haskell 2 we'll also have
>
> t :: T T => T a -> T a
>
> In (T T) one is class and the other is a type constructor.
Let's leave the language as it is: class names and type names must be
distinct. Rationale: the above examples show that a change might have
questionable consequences. Recall that the change requires adding the
label `class' to signatures, but not adding the label `type'; it feels
more like a convenient hack than a well-rounded design. Rather than
make a questionable change now, let's leave it for Haskell 2 and get it
right there. -- P