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