練習問題 2.6.1.

差が10マイル未満の距離は互いに等しいとみなしたいと仮定する.
Distance
を型シノニムとして定義している場合,
Distance
上の相等性検査演算を定義できるか.できるとすると,それを
==
とすることはできるか.



距離を表す型なら,元にする型は通常
Ord
クラスおよび
Num
クラスのインスタンスと宣言されているものを選ぶだろ.
Ord
クラスも
Num
クラスも
Eq
クラスの型に対して定義されるので,
Distance
の元の型は
Eq
のインスタンスでもある.
Distance
は型シノニムなので既に
Eq
クラスのインスタンスとして宣言されていることになる. 新しい相等性演算子,たとえば,
`distEq`
は定義できるが,Haskellにおいてはクラスインスタンスを多重定義できないので,それを
==
とすることはできない.


type Distance = Double
distEq :: Distance -> Distance -> Bool
distEq d d' = abs (d - d') < 10