类型继承 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
方法或 (<=)
方法本身,这将构建有向继承点阵。