練習問題 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