パラメトリック多相

パラメトリック多相とは何かと考えていたら、

関数はパラメータを持ち、これを実際の値に束縛します。Haskell の型はパラメータを持つことができ、これを別の型に束縛できます。

Real World Haskell――実戦で学ぶ関数型言語プログラミング

この一文で理解できた、と思う。

関数のパラメータには任意の値を入れることができる。例えばこんな感じ。文字列ではあるけど値は何でもいい。

int atoi(const char *nptr);
atoi("12345");
atoi("abcde");
atoi(")('&%$#");

型のパラメータだと、こんな感じ。リストであれば何の型のリストでもいい。

last :: [a] -> a
last [1, 2, 3, 4, 5]
last "abcde"
last [True, False, False, True]

ということ?