Jon Fairbairn <[EMAIL PROTECTED]> writes:

> Which leads me to my own question: in current
> implementations, if I have a data structure containing a
> function (D f, say), and from it I generate anoter (D (flip
> f)), and then later (D (flip (flip f))) and so on, do the
> flips get reduced (to nothing if there's an even number of
> them) when the field of D is evaluated?

No, not as far as I can see, unless there are opportunities for static
inlining (and therefore compile-time reduction).  AIUI, the application
of flip needs to see three arguments before it can be evaluated.
Thus, in this example:

    let f''  = flip (flip f)
        appf = f'' 0
    in [appf 1, appf 2, appf 3]

the code for flip will run six times, whereas here:

    let f''  = flip (flip f)
        appf = f'' 0 1
    in [appf 2, appf 3, appf 4]

the code for flip is run only twice.  The difference in the examples
is that flip is only partially applied in the first case, but fully
saturated in the second.

At any rate, I think this is how it works in nhc98.

Regards,
    Malcolm
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to