Arrow Classes

Ashley Yakeley ashley@semantic.org
Sat, 12 Jul 2003 03:41:59 -0700


In article <200307121058.21556.alastair@reid-hoffmann.net>,
 Alastair Reid <alastair@reid-hoffmann.net> wrote:

> One way to overcome part of this problem would be to generalize the idea of 
> 'type synonyms' to allow 'context synonyms'.  For example, we have type 
> synonyms like:
> 
>   type Point = (Int,Int)
> 
> we could have 'context synonyms' like:
> 
>   class Num a => (Add a, Subtract a, FromInteger a, Eq a, Multiply a, ...) 

That would be quite unnecessary. Simply write this:

  class (Add a, Subtract a, FromInteger a, Eq a, Multiply a, ...) =>
   Num a;
  instance (Add a, Subtract a, FromInteger a, Eq a, Multiply a, ...) =>
   Num a;

And now you can write this:

  invert :: Num a => Matrix a -> Matrix a

I use this idiom quite frequently for "joining" classes together.

-- 
Ashley Yakeley, Seattle WA