Andrew J Bromage <ajb@spamcop.net> writes:
class Plus a b c | a b -> c where (+) :: a -> b -> c
class Mult a b c | a b -> c where (*) :: a -> b -> c
This kind of approach was discussed a while ago, and has a bunch of things to recommend it. Is the functional dependency sufficient to avoid any ambiguity?
class (Eq a, Show a, Plus a a a, Mult a a a, {- etc -} ) => Num a
Apart from the possibility of naming these typeclasses better, this reorganisation gets my vote for Haskell 2.
Add the ability to do instance Num Foo where a + b = ... a - b = ... a * b = ... i.e when instantiating a derived class (if one can call it that), allow implicit instantiation of base classes. One thing to look out for, is a hierarchy of esoterically named classes, and consequentially, error messages incomprehensible to people unfamiliar with the details of the hierarchy. -kzm -- If I haven't seen further, it is by standing in the footprints of giants