[Haskell-cafe] Re: Eta-expansion destroys memoization?

Bertram Felgenhauer bertram.felgenhauer at googlemail.com
Tue Oct 12 04:34:15 EDT 2010


Simon Marlow wrote:
> Interesting.  You're absolutely right, GHC doesn't respect the
> report, on something as basic as sections!  The translation we use
> is
> 
>   (e op)  ==>  (op) e
> 
> once upon a time, when the translation in the report was originally
> written (before seq was added) this would have been exactly
> identical to \x -> e op x, so the definition in the report was
> probably used for consistency with left sections.
> 
> We could make GHC respect the report, but we'd have to use
> 
>   (e op)  ==>  let z = e in \x -> z op x
> 
> to retain sharing without relying on full laziness.

We should keep in mind that this was changed deliberately in ghc 6.6,
in order to support "postfix" operators.

    http://www.haskell.org/ghc/docs/6.6/html/users_guide/release-6-6.html

The motivating example was the factorial operator which can currently
be written as  (n !)  in ghc-Haskell.

Cheers,

Bertram


More information about the Haskell-Cafe mailing list