Wann kann eta reduction den Typ einer Funktion ändern?

Was genau ist mit dem Folgenden los?

<code>> let test = map show

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

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

Ich frage mich, wie ich das vorher nicht bemerkt habe. Ich bin auf das Problem mit "map fromIntegral" gestoßen, anstatt es anzuzeigen. Mein Code wird nicht mit der pointfree-Form kompiliert, funktioniert aber ohne eta-Reduktion.

Gibt es eine einfache Erklärung, wann die eta-Reduktion die Bedeutung von Haskell-Code ändern kann?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage