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))


It makes much more sense to me to have type (2), the scope for errors and code duplication is much lower in my opinion.

All the best,
 Daan.

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

Reply via email to