[Haskell-cafe] Re: [Haskell] Re: Haskell Digest, Vol 52, Issue 1

Simon Marlow simonmarhaskell at gmail.com
Wed Dec 5 03:59:31 EST 2007


Taral wrote:
> On 12/4/07, Simon Marlow <simonmarhaskell at gmail.com> wrote:
>>   do
>>      x <- newIVar
>>      let y = readIVar x
>>      writeIVar x 3
>>      print y
>>
>> (I wrote the let to better illustrate the problem, of course you can inline
>> y if you want).  Now suppose the compiler decided to evaluate y before the
>> writeIVar.  What's to prevent it doing that?
> 
> Look at the translation:
> 
> newIVar >>= (\x -> let y = readIVar x in writeIVar x 3 >> print y)
> 
> y can't be floated out because it depends on x.

y doesn't need to be floated out, just evaluated eagerly.

Cheers,
	Simon


More information about the Haskell-Cafe mailing list