型別繼承 Ord 型別類
Haskell 支援類擴充套件的概念。例如,類 Ord
繼承了 Eq
中的所有操作,但另外還有一個 compare
函式,它返回值之間的 Ordering
。Ord
還可以包含公共順序比較運算子,以及 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
方法或 (<=)
方法本身,這將構建有向繼承點陣。