前節で、5という数値に対して奇妙な型定義をしなければならないことがわかった。型クラスについて深く掘り下げて調べる前に少し話を戻し、そもそも型クラスを導入することになった動機について少し考察しよう。 多くの言語 (C++、Javaなど) で、オーバーロードという仕組みが存在する。つまり、さまざまなパラメータ型をとるように、関数を記述することができる仕組みだ。たとえば、同値関数がそのよい例だ。2つの整数を比較する場合は整数の比較関数を使用する必要がある。2つの浮動小数点数を比較する場合は浮動小数点数の比較関数を使用する必要がある。2つの文字を比較する場合は文字の比較関数を使用する必要がある。一般に、型αのもの同士を比較する場合は、型αの比較関数が必要になるのだ。このαは型を値とする変数なので、型変数と呼んでいる。 ところがこれは、静的型チェックにとっては都合が悪い。というのも、ある処理 (たと