関数型言語における「型クラス(type class)」

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