
Ok, *this* works just fine: data Hand = HighCard {cards :: [Card]} | PairOf {rank1 :: Rank, cards :: [Card]} | TwoPair {rank1, rank2 ::Rank, cards :: [Card]} | ThreeOfAKind {rank1 :: Rank, cards :: [Card]} | Straight {cards :: [Card]} | Flush {cards :: [Card]} | FullHouse {rank1, rank2 :: Rank, cards :: [Card]} | FourOfAKind {rank1 :: Rank, cards :: [Card]} | StraightFlush {cards :: [Card]} deriving (Show, Eq, Ord) The derived order is actually correct - providing, again, that the hands are well-formed (which the unshown constructor makeHand :: [Cards] -> Hand insures). The only writeup I could find for deriving Ord for datatypes was the report. Anyone got a better pointer to one?