Quando a redução eta pode alterar o tipo de uma função?

O que exatamente está acontecendo com o seguinte?

<code>> let test = map show

> :t test
test :: [()] -> [String]

> :t (map show)
(map show) :: Show a => [a] -> [String]
</code>

Eu estou querendo saber como eu não percebi isso antes? Na verdade, eu encontrei o problema com "map fromIntegral" em vez de mostrar - meu código não compila com a forma pointfree, mas funciona bem sem redução de eta.

Existe uma explicação simples de quando a redução eta pode mudar o significado do código Haskell?

questionAnswers(1)

yourAnswerToTheQuestion