プログラミングHaskell 第3章 型とクラス
多相型
型変数とはなんだろうか?
length::[a]->Int
wikipediaにあった!
型変数を使い、型を抽象化することもできる。これは C++ のテンプレートや Java のジェネリクスが型を抽象化するのに相当する。例えば、a 型の値をとり、それをそのまま返す恒等関数 id を型の指定とともに定義すると以下のようになる。ここで任意の型を示す型名 a が定義に使われているが、このように先頭が小文字で始まっている型名は具体的な型名ではなく型変数である。この関数はあらゆる型の値を引数にとることができる。
http://ja.wikipedia.org/wiki/Haskell/
多重定義型
クラス制約ってなんだろう。
(+) :: Num a => a -> a -> a negate::Num a => a -> a
ああ、上の例でいうところの"Num a =>"というところがクラス制約になのか。で多重定義型というのはこのクラス制約が一つ以上持っている型らしい。
感想
最初読んだときに内容が頭の中にすっと入らなかった。
Int -> Int
って書かれると、それは型ではなくて、Int型を取りInt型を返す関数と思ってしまう。だから、そのあと出てくる、「型に(型変数|クラス制約)を含める」という内容を見てもピンとこなかった。わかってしまえば何のことはないんだけど。