
Dear Haskellers, The following compiles. (Rev stands for Reversible, and Dirn for Direction.) class Rev a where rev :: a -> a data Dirn = Succ | Pred deriving (Eq, Show, Ord) -- implement Ord (<=) Succ Pred = False (<=) _ _ = True -- implement Rev instance Rev Dirn where rev Succ = Pred rev Pred = Succ But if I try to define the Rev instance the same way the Ord instance is being defined, it does not compile: class Rev a where rev :: a -> a data Dirn = Succ | Pred deriving (Eq, Show, Ord, Rev) -- implement Ord, because Dirn is used as a key in a Map (<=) Succ Pred = False (<=) _ _ = True -- implement Rev rev Succ = Pred rev Pred = Succ What's going on? Many thanks, Jeff