generated at
Haskellの型クラス
Haskellの型クラス
脱糖できる


定義する
hs
class Eq a where (==) :: a -> a -> Bool (/=) :: a -> a -> Bool x == y = not (x /= y) x /= y = not (x == y)
where の後にmethodが続く

型クラスのインターフェース
Eq型クラスのインターフェースは == /=
Eq型クラスのインスタンスとなる型の値なら↑これらが使える
たとえばIntとか


インターフェースのデフォルト実装
hs
class 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にする


サブクラスという概念
すごいH本 p.145

型クラスの例