map関数の動作。
main = print $ map square [1, 2, 3] square :: Int -> Int square n = n * n
結果。
[1,4,9]
map関数の定義はこんな感じ。
map :: (a -> b) -> [a] -> [b] map f [] = [] map f (x:xs) = f x : map f xs
始めの定義は空のリストにマッチし、空のリストを返す。
map f [] = []
次のは要素が1つ以上あるリストにマッチし、始めの要素にはfで渡された処理を適用、以降の要素には再度map関数を適用。
map f (x:xs) = f x : map f xs
(f 1) : (f [2, 3])
:はリストを生成する演算子。
この処理が始めに渡されたリストの全要素に対して行われ、
[1,4,9]
となる。