[Haskell-cafe] Ord (IORef a)?
Simon Marlow
simonmar at microsoft.com
Tue Jun 22 06:54:17 EDT 2004
On 22 June 2004 10:38, Simon Peyton-Jones wrote:
>> From: John Meacham
>> 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.)
>
> I think that'd be entirely reasonable. Two runs of the same program
> might give observably different behaviour wrt Ord, but that's ok
> because the refs are allocates in the monad, as you say.
>
> There is an efficiency cost though. Each IORef would need to have an
> extra field, to record its allocation ID. (Address is not enough --
> the garbage collector can mangle them.)
>
> My own view is that this is fine -- IORefs shouldn't be in your inner
> loop, so an extra word in each is no big deal. Unless there are
> views to the contrary, I'd be happy to see this in GHC.
I'm torn. If it were free, it would be a no-brainer. But I know of
several cases where IORefs are performance-critical (or at least
performance-important). We should implement & measure.
Cheers,
Simon
More information about the Haskell-Cafe
mailing list