プログラミングHaskell 第3章 型とクラス

型を知る

:type

頭に':'が付いているんだけど、":名前"という形式にはどんな意味があるのだろうか?とりあえずスルー。本にはHugsではと書かれているがghciでも動いた。

多相型

型変数とはなんだろうか?

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型を返す関数と思ってしまう。だから、そのあと出てくる、「型に(型変数|クラス制約)を含める」という内容を見てもピンとこなかった。わかってしまえば何のことはないんだけど。