Jan-Willem Maessen wrote:
Consider this:
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? Nothing in
the Haskell spec, only implementation convention.
Nope, semantics. If we have a cyclic dependency, we have to respect
it---it's just like thunk evaluation order in that respect.
Ah, so I was thinking of the following readIVar:
readIVar = unsafePerformIO . readIVarIO
But clearly there's a better one. Fair enough.
Cheers,
Simon
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe