有人可以向我解释如何使自定义数据类型可排序吗?

**例如,不允许我对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

您的实际订购可能有所不同,但这应该可以为您提供基本的想法。

10-08 12:36