プログラミング勉強ログ

プログラミングの勉強記録

Yet Another Haskell 4章 (2)

4.2 Polymorphic Types
多相型

関数tailはリストを引数にとるが、そのリストが内包する値の型に関わらず適用できる。

Prelude> tail [5,6,7,8,9]
[6,7,8,9]
Prelude> tail "hello"
"ello"
Prelude> tail ["the","man","is","happy"]
["man","is","happy"]

これはtailの型が多相型[a]->[a]だからだ。

Prelude> :t tail
tail :: [a] -> [a]

つまり、tailは任意のリストを引数として受け取り、同じ型のリストを返す。


fstの型を調べてやると、

Prelude> :t fst
fst :: (a, b) -> a

つまり、fstは任意のペアを引数として受け取り、ペアの最初の要素と同じ型の値を返す。


この多相型ってのは、C++のテンプレートや、JavaC#ジェネリクスと似たようなものなのかな。

Exercise 4.2 省略