IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

関数適用は最優先 (99 questions problem 8 より)

回答は、下記なのですが、理解に苦しみました。

compress :: Eq a => [a] -> [a]
compress = map head . group

mapを使ってリストの要素に対してhead . group をする意味が分かりませんでした。

map head . group [1,1,2,2,3]

とあったときに

リストの要素0番目の1に対して head . group
リストの要素1番目の1に対して head . group
リストの要素2番目の2に対して head . group
...
がなんでできるのか?

*Main> :t head . group
head . group :: Eq a => [a] -> [a]
*Main> 

だから、head .group にリストではない単一の値を適用できないはずなので、おかしいなぁと。

よくよく考えると、上の考えが全く間違っていて、

map head . group = map (head . group)

ではなく、

map head . group = (map head) . group

と理解するのが正しいですね。

空白がドットより優先されることにしっかり慣れないとまたおなじ間違えをしそうです。