atomicModifyIORef

Daan Leijen <[email protected]> Fri, 25 Jun 2004 16:08:52 +0200
Newsgroups gmane.comp.lang.haskell.ffi
Message-ID <[email protected]>
Thanks Martin and Simon for your prompt feedback.
(and apologies for the wrong subject header)

On Fri, 25 Jun 2004 12:14:26 +0100, Simon Marlow <[email protected]> wrote:
>> It seems to me that returning the old value is always good
>> enough right?  Here is an implementation of "atomicModifyIORef"
>> with the current type in terms of a function "proposedModifyIORef"
>> with type (2).
>>
>> atomicModifyIORef :: IORef a -> (a -> (a,b)) -> IO b
>> atomicModifyIORef ref f
>>    = do old <- proposedModifyIORef ref (fst . f)
>>         return (snd (f old))
>
> Yes, but in your version you apply f to the old value twice, potentially
> duplicating an expensive computation.

Ok, I never thought of that. However, isn't it the case
that I normally just want to get the old value back?
In that case, the current interface is not so friendly.

Is anyone using this function to get something else than the
old/new value *and* where the computation is expensive?

If not, maybe we should (also) provide a nicer interface?


> atomicModifyIORef isn't part of the FFI spec, BTW.

Well, I asked about this as I was confused by the
type of this function: at first I thought that I was missing
some essential functionality :-)

-- Daan.


>
> Cheers,
> 	Simon
> _______________________________________________
> FFI mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/ffi
>
>