On 12/4/07, Simon Marlow <[EMAIL PROTECTED]> 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.
--
Taral <[EMAIL PROTECTED]>
"Please let me know if there's any further trouble I can give you."
-- Unknown
_______________________________________________
Haskell mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell