型別繼承 Ord 型別類

Haskell 支援類擴充套件的概念。例如,類 Ord 繼承了 Eq 中的所有操作,但另外還有一個 compare 函式,它返回值之間的 OrderingOrd 還可以包含公共順序比較運算子,以及 min 方法和 max 方法。

=> 符號與函式簽名中的含義相同,並且需要型別 a 來實現 Eq,以實現 Ord

data Ordering = EQ | LT | GT

class Eq a => Ord a where
    compare::Ord a => a -> a -> Ordering
    (<)     :: Ord a => a -> a -> Bool
    (<=)    :: Ord a => a -> a -> Bool
    (>)     :: Ord a => a -> a -> Bool
    (>=)    :: Ord a => a -> a -> Bool
    min     :: Ord a => a -> a -> a
    max     :: Ord a => a -> a -> a

compare 之後的所有方法都可以通過多種方式從中派生出來:

x < y   = compare x y == LT
x <= y  = x < y || x == y -- Note the use of (==) inherited from Eq
x > y   = not (x <= y)
x >= y  = not (x < y)

min x y = case compare x y of
               EQ -> x
               LT -> x
               GT -> y

max x y = case compare x y of
               EQ -> x
               LT -> y
               GT -> x

自己擴充套件 Ord 的型別類必須至少實現 compare 方法或 (<=) 方法本身,這將構建有向繼承點陣。