有人可以向我解释如何使自定义数据类型可排序吗?
**例如,不允许我对Suit本身进行修改。派生(Eq,Ord)
data Suit = Clubs | Diamonds | Hearts | Spades deriving (Eq)
我的尝试:
instance Ord Suit where
compare suit1 suit2 = compare suit1 suit2
但这似乎是一个连续的循环,并且不会停止。
最佳答案
Ord的定义看起来像(但不完全是)
class Ord a where
compare :: a -> a -> Ordering
和
Ordering
具有三个可能的值:LT, EQ, GT
。因此,您需要定义每个比较的结果。就像是:
instance Ord Suit where
compare Clubs Diamonds = LT
compare Diamonds Clubs = GT
compare Diamonds Diamonds = EQ
compare Diamonds _ = LT -- Diamonds are lower than everything besides Clubs and Diamonds
您的实际订购可能有所不同,但这应该可以为您提供基本的想法。