In some cases, we only care about a change being made atomically
to an IORef, but do not want to simultaneously read a value from
it. In this case, we can accept a function only returning the
new value, and not a pair of result and new value.

Signed-off-by: Klaus Aehlig <[email protected]>
---
 src/Ganeti/Utils/IORef.hs | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/Ganeti/Utils/IORef.hs b/src/Ganeti/Utils/IORef.hs
index 488d2e8..a220e3e 100644
--- a/src/Ganeti/Utils/IORef.hs
+++ b/src/Ganeti/Utils/IORef.hs
@@ -34,6 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 module Ganeti.Utils.IORef
   ( atomicModifyWithLens
+  , atomicModifyWithLens_
   , atomicModifyIORefErr
   , atomicModifyIORefErrLog
   ) where
@@ -53,6 +54,11 @@ atomicModifyWithLens :: (MonadBase IO m)
                      => IORef a -> Lens a a b c -> (b -> (r, c)) -> m r
 atomicModifyWithLens ref l f = atomicModifyIORef ref (swap . traverseOf l f)
 
+-- | Atomically modify an 'IORef', not reading any value.
+atomicModifyWithLens_ :: (MonadBase IO m)
+                      => IORef a -> Lens a a b c -> (b -> c) -> m ()
+atomicModifyWithLens_ ref l f = atomicModifyWithLens ref l $ (,) () . f
+
 -- | Atomically modifies an 'IORef' using a function that can possibly fail.
 -- If it fails, the value of the 'IORef' is preserved.
 atomicModifyIORefErr :: (MonadBase IO m)
-- 
2.5.0.rc2.392.g76e840b

Reply via email to