関数適用は最優先 (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
と理解するのが正しいですね。
空白がドットより優先されることにしっかり慣れないとまたおなじ間違えをしそうです。