a...@spamcop.net wrote:
G'day all.
Quoting Sebastian Fischer <s...@informatik.uni-kiel.de>:
I have wrapped up (a tiny subset of) GHC's uniques into the package
`uniqueid` and put it on Hackage:
http://hackage.haskell.org/cgi-bin/hackage-scripts/package/uniqueid
First off, thanks for this.
The main difference is due to my fear of depending on the foreign
function `genSymZh` which I replaced by a global counting IORef.
Why not depend on this instead?
http://hackage.haskell.org/cgi-bin/hackage-scripts/package/value-supply
Looking at the code for this, I'm somewhat suspicious that it actually
works with GHC:
-- The extra argument to ``gen'' is passed because without
-- it Hugs spots that the recursive calls are the same but does
-- not know that unsafePerformIO is unsafe.
where gen _ r = Node { supplyValue = unsafePerformIO (genSym r),
supplyLeft = gen False r,
supplyRight = gen True r }
even if that extra Bool argument is enough to fool Hugs, I wouldn't count
on it being enough to fool GHC -O2! You probably want to use
unsafeInterleaveIO like we do in GHC's UniqSupply library.
Also, I'd replace the MVar with an IORef and use atomicModifyIORef for speed.
Cheers,
Simon
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users