On Thursday 13 October 2005 12:22, John Meacham wrote: > On Thu, Oct 13, 2005 at 12:08:27PM +0200, Wolfgang Jeltsch wrote: > > > We allow new constructs of this form (the exact syntax is > > > flexible of > > > > > > course): > > > > class alias (Foo a, Bar a) => FooBar a where > > > > foo = ... > > > > > > what this does is declare 'FooBar a' as an alias for the two > > > constraints 'Foo a' and 'Bar a'. This affects two things. > > > > Wouldn't it be better to write it this way: > > > > class alias (Foo a, Bar a) = FooBar a where ... > > > > (Foo a, Bar a) => FooBar a normally means that a type is an > > instance of Foo and Bar if it is an instance of FooBar but in the > > case of aliases, a type is also an instance of FooBar if it is an > > instance of Foo and Bar. > > Yeah, I totally agree. it would also reduce confusion with > superclasses and emphasises the fact that the two sides are > equivalent everywhere. (except instance heads) > > although perhaps > > > class alias FooBar a = (Foo a, Bar a) where ... > > since the new name introduced usually appears to the left of an > equals sign. This also solves the problems of where to put new > supertype constraints.
Using '=' instead of '=>', you could even leave out the 'alias': class FooBar a = (Foo a, Bar a) where ... Ben _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell