次の場合、正確には何が起こっているのでしょうか。
> let test = map show
> :t test
test :: [()] -> [String]
> :t (map show)
(map show) :: Show a => [a] -> [String]
以前はどうしてこれに気づかなかったのだろうか?show ではなく「map fromIntegral」で実際に問題が発生しました。私のコードは pointfree 形式ではコンパイルされませんが、eta リダクションなしでは問題なく動作します。
eta リダクションが Haskell コードの意味を変更できる場合の簡単な説明はありますか?