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++のテンプレートや、JavaやC#のジェネリクスと似たようなものなのかな。
Exercise 4.2 省略