
On Tue, 26 Jul 2011, Tim Cowlishaw wrote:
For instance, for a typeclass representing the interface that any Order type should implement:
class Order o where price :: o -> Int size :: o -> Int
I'd like to be able to specify an Eq instance for all types of class Order in a manner similar to this:
instance (Order o) => Eq o where o1 == o2 = (price o1 == price o2) && (size o1 == size o2)
You may define once: orderEq :: Order o => o -> o -> Bool orderEq o1 o2 = (price o1 == price o2) && (size o1 == size o2) and then define instances like instance Order A where ... instance Eq A where (==) = orderEq instance Order B where ... instance Eq B where (==) = orderEq I don't think there is an easier and still predictable way of defining the Eq instances.