top page > computer > haskell > web_lecture > for_programmer > whats_type_class.html
更新日:
文責: 重城良国

型クラスとは

(工事中 30%)

lecture13.hs lecture13.md

はじめに

型クラスについて考えるときには

といったキーワードへの理解が役に立つ。

型クラスとは性質である

型クラスEqというものは同値比較が可能という性質を示す。同じように型クラスOrdは大小比較可能という性質だ。型クラスは多くの型に共通する「性質」をくくり出したものと言える。そしてその性質は具体的には「特定の関数を持つ」という形で表される。

型クラスとは仕様(API)である

性質は特定の関数を持つことで表現される。型クラスにはその「性質」を満たすための関数のセットが指定されている。これは見かたをかえると型の仕様を定義したものと考えることができる。たとえばInt型の値のスタックとなりうるのは以下の仕様を満たす型だ。

この性質を型クラスにすることでスタックとしての仕様とその実装を分離できる。ひとつの仕様に対して複数の実装を定義できる。

アドホック多相

型クラスという仕組みによって「もうひとつの多相性」であるアドホック多相が実現できる。アドホックとは「その場しのぎ」といった意味合いで使われる言葉だ。アドホック多相とはパラメトリック多相のような「本質的」な多相性ではなく、必要な関数をそれぞれの型に対して別個に定義してやることによる多相性だ。

文字列から作られるものは「文字列である」

型クラスIsStringのインスタンスとなる型aは関数fromStringを持つ。関数fromStringは

fromString :: String -> a

のように指定されている。つまりIsStringであるためには文字列から自身の型の値を返す関数fromStringを持つ必要があるということだ。多相的でありながら型の厳格さを維持している。

インスタンス

のように「型Tは型クラスCのインスタンスである」と表現する。

まとめ

言葉だけの説明ではよくわからないかもしれない。具体的な例を見ていこう。

「NML(5): スタンドアロンなデコーダ、エンコーダ」へもどる 「型クラスに触れる」へ

正当なCSSです! HTML5 Powered with CSS3 / styling, and Semantics