On 25 June 2004 11:30, Daan Leijen wrote:

> Is there anyone who knows why "atomicModifyIORef" has type:
> 
>   IORef a -> (a -> (a, b)) -> IO b            (1)
> 
> Instead of:
> 
>   IORef a -> (a -> a) -> IO a                 (2)
> 
> 
> 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.

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

Cheers,
        Simon
_______________________________________________
FFI mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/ffi

Reply via email to