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]

となる。