base-compat-0.13.1: A compatibility layer for base

Safe Haskell | Safe-Inferred
Language | Haskell2010

Data.IORef.Compat

Synopsis

- module Data.IORef
- modifyIORef' :: IORef a -> (a -> a) -> IO ()
- atomicModifyIORef' :: IORef a -> (a -> (a, b)) -> IO b
- atomicWriteIORef :: IORef a -> a -> IO ()

# Documentation

module Data.IORef

modifyIORef' :: IORef a -> (a -> a) -> IO () Source #

Strict version of `modifyIORef`. This is not an atomic update, consider using `atomicModifyIORef'` when operating in a multithreaded environment.

Since: base-4.6.0.0

atomicModifyIORef' :: IORef a -> (a -> (a, b)) -> IO b Source #

Strict version of `atomicModifyIORef`. This forces both the value stored in the `IORef` and the value returned. The new value is installed in the `IORef` before the returned value is forced. So

    atomicModifyIORef' ref (x -> (x+1, undefined))

will increment the `IORef` and then throw an exception in the calling thread.

This function imposes a memory barrier, preventing reordering; see Data.IORef for details.

Since: base-4.6.0.0

atomicWriteIORef :: IORef a -> a -> IO () Source #

Variant of `writeIORef`. The prefix "atomic" relates to a fact that it imposes a reordering barrier, similar to `atomicModifyIORef`. Such a write will not be reordered with other reads or writes even on CPUs with weak memory model.

Since: base-4.6.0.0