[Haskell-cafe] Re: CAF's in Haskell

Jon Fairbairn jon.fairbairn at cl.cam.ac.uk
Thu Dec 27 06:25:17 EST 2007


"Neil Mitchell" <ndmitchell at gmail.com> writes:
> I should have been more precise with my question. Given the code:
>
> fred = 2 + 2
>
> bob = fred + fred
>
> In a Haskell implementation fred would be evaluated once to 4, then
> used twice. The 2+2 would only happen once (ignore defaulting and
> overloaded numerics for now).

Not necessarily.  The Haskell 98 standard very carefully
avoids mandating any particular evaluation strategy beyond
that it should be non-strict. So bob is always going to be
8, but just how it gets there is up to the implementation.

If you'd had

fred = [1..]

and 

bob = do something with fred
         a lot of other stuff
         something else with fred

it's much less obvious that keeping the first-calculated
value for fred around the whole time is the right thing to
do.

> Do all Haskell compilers support the sharing.

I don't know all Haskell compilers, but I'm pretty sure
there have been implementations that don't, or don't always
because of the above problem.

-- 
Jón Fairbairn                                 Jon.Fairbairn at cl.cam.ac.uk




More information about the Haskell-Cafe mailing list