スーパークラス/サブクラス

今日もメモ程度。


値の大小関係を表すには Ord クラス。「入門Haskell」によればOrd クラスの定義は次のようである,らしい。

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

大小関係を判定するには等しいか否かを判定できなければならない,というわけで Eq a => Ord a となっている。このとき,Eq は Ord のスーパークラスであるといい,逆に Ord は Eq のサブクラスであるという。
関数の型のときにでてきた context みたいなものか。


ところで,Ord クラスのインスタンスに Bool も含まれてるんだけど,これってどんなときに使うんだろう。

 Prelude> True < False
 False
 Prelude> True > False
 True

True は False より大きいとか言われても,何それ。