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