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?