http://walk.wgag.net/haskell/typeclass.html
引数や戻り値の「型」の、(オブジェクト指向で言う)インターフェース定義的なものが「型クラス」。
型クラスの定めるインターフェースを実装した「型」のことをインスタンスと呼ぶ。オブジェクト指向用語のインスタンスはクラスから作ったメモリ上の値だが、ここで言う型クラスのインスタンスはオブジェクト指向で言うと「インターフェースを実装したクラス」に当たる。
具体的には、numberという型クラスがあり、その型クラスのインスタンスとして int, float, double, decimal などが存在するというぐあい。
ジェネリック関数を書く時に「function T Add
型クラスを使えば「function number Add
(関数型言語では型推論で使うで実際は「function number Add(number num1, number num2) { return a + b; }」みたいな定義をして、渡される値の型から、関数でつかう型を推論するという使い方をするみたい)