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