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

Reply via email to