Iavor Diatchki wrote:
Hello,
I have made the two changes that Simon suggested and uploaded a new
version of the library. By the way, GHC seemed to work correctly
even without the extra boolean parameter, perhaps it treats
unsafePerformIO specially somehow? A somewhat related question: I
ended up using three calls to unsafeInterleaveIO which seems like a
bit much. Could I have done it in a different way somehow? This is
what I did:
gen r = do v <- unsafeInterleaveIO (genSym r)
ls <- unsafeInterleaveIO (gen r)
rs <- unsafeInterleaveIO (gen r)
return (Node v ls rs)
I'd probably do it like this:
> gen r = unsafeDupableInterleaveIO $ do
> v <- unsafeDupableInterleaveIO (genSym r)
> ls <- gen r
> rs <- gen r
> return (Node v ls rs)
which is close to the way GHC does it, except that we do indeed call genSym
for every node. Calling genSym is cheaper than building the thunk for
unsafeDupableInterleaveIO, although if there's an atomicModifyIORef
involved that will probably tip the balance the other way.
Cheers,
Simon
_______________________________________________
Glasgow-haskell-users mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users