型クラス

Java等のクラスとは違い、特定の型コンストラクタの集合を定義する。
多相型に制約をつけるためのもの

  • アドホック多相: 制約のついた多相性
  • パラメータ多相: 制約の無い多相性

クラスメソッド

  • 型クラスを特徴付ける関数
  • ある型クラスに属する型は、その型クラスのクラスメソッドをすべて実装している必要がある
  • インスタンスとなる型ごとにオーバーロードされる

型クラスの継承

class Eq a where                    -- class宣言
    (==), (/=) :: a -> a -> Bool    -- クラスメソッドの型宣言
    x == y = not (x /= y)
    x /= y = not (x == y)
    -- これ以上の定義はインスタンス側に任せる

class (Eq a) => Ord a  where        -- 継承
  (略)

data Anchor = A String String
instance Eq Anchor where            -- instance宣言
  (A u l) == (A u' l')  = (u == u') '' (l == l')


data Anchor = A String String deriving Eq 
         -- 実装が自明な場合はderiving宣言で代用できる