[Haskell-cafe] Ord (IORef a)?
tpledger at ihug.co.nz
Tue Jun 22 06:31:50 EDT 2004
John Meacham wrote:
>would it be possible to provide an Ord instance for (IORef a)? For
>things like loop detection, one may need to make many IORef comparasions
>and being able to use an efficient set would be a really big win.
>Since IORefs are created in the IO monad, the actual order can be
>arbitrary without breaking referential transparency (as long as it
>doesn't change over the lifetime of the IORef.)
Someone posted an 'inside out' solution to this a while ago, but I'm
having trouble finding it in the mail archives.
It was along these lines:
type CollectionOfIoRef = Int
newtype IoRef a = IoRef (IORef (a, Array CollectionOfIoRef Bool))
You use this wrapper, IoRef, instead of IORef. To insert a reference
into a collection, you add the *collection* to the IoRef's hidden set.
More information about the Haskell-Cafe