Haskellの型クラス
脱糖できる
定義する
hsclass Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
x == y = not (x /= y)
x /= y = not (x == y)
where
の後にmethodが続く
型クラスのインターフェース
Eq型クラスのインターフェースは ==
や /=
Eq型クラスのインスタンスとなる型の値なら↑これらが使える
たとえばIntとか
インターフェースのデフォルト実装
hsclass Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
x == y = not (x /= y)
x /= y = not (x == y)
Eq型クラスでは
==
と
/=
が定義されているが、これらは
最小完全定義で定義されている
つまり ==
の定義に /=
を、 /=
の定義に ==
を使う相互再帰で定義されている
ので、インスタンスにするときも ==
か /=
のどちらかについて定義しとけば両方使える
自作型を型クラスのインスタンスにする
信号を表す自作の型 TL
を型クラスEqのインスタンスにする
hs-- 自作のTrafficLightの型
data TL = R | Y | G
-- Eq型クラスのインスタンスにする
instance Eq TL where
R == R = True
Y == Y = True
G == G = True
_ == _ = False
-- Show型クラスのインスタンスにする
instance Show TL where
show R = "Right Light"
show Y = "Yewllow Light"
show G = "Green Light"
既存の型を型クラスのインスタンスにする方法
instanceにする
サブクラスという概念

p.145
型クラスの例