¿Cuándo puede la reducción eta cambiar el tipo de una función?

¿Qué está pasando exactamente con lo siguiente?

<code>> let test = map show

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

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

Me pregunto cómo no he notado esto antes? De hecho, encontré el problema con "map fromIntegral" en lugar de mostrar: mi código no se compila con la forma de punto libre, pero funciona bien sin reducción eta.

¿Existe una explicación simple de cuándo la reducción de eta puede cambiar el significado del código de Haskell?

Respuestas a la pregunta(1)

Su respuesta a la pregunta