IORef package:relude

Lifted reexports from Data.IORef module.
A mutable variable in the IO monad.
>>> import GHC.Internal.Data.IORef

>>> r <- newIORef 0

>>> readIORef r
0

>>> writeIORef r 1

>>> readIORef r
1

>>> atomicWriteIORef r 2

>>> readIORef r
2

>>> modifyIORef' r (+ 1)

>>> readIORef r
3

>>> atomicModifyIORef' r (\a -> (a + 1, ()))

>>> readIORef r
4
See also STRef and MVar.
Lifted version of atomicModifyIORef.
>>> ref <- newIORef 42

>>> atomicModifyIORef ref (\a -> (a, a + 3))
45

>>> readIORef ref
42
Lifted version of atomicModifyIORef'.
>>> ref <- newIORef 42

>>> atomicModifyIORef' ref (\a -> (a, a + 3))
45

>>> readIORef ref
42
Version of atomicModifyIORef' that discards return value. Useful when you want to update IORef but not interested in the returning result.
>>> ref <- newIORef 42

>>> atomicModifyIORef'_ ref (`div` 2)

>>> readIORef ref
21
Version of atomicModifyIORef that discards return value. Useful when you want to update IORef but not interested in the returning result.
>>> ref <- newIORef 42

>>> atomicModifyIORef_ ref (`div` 2)

>>> readIORef ref
21
Lifted version of atomicWriteIORef.
>>> ref <- newIORef 42

>>> atomicWriteIORef ref 45

>>> readIORef ref
45
Lifted version of modifyIORef.
>>> ref <- newIORef 42

>>> modifyIORef ref (\a -> a + 6)

>>> readIORef ref
48
Lifted version of modifyIORef'.
>>> ref <- newIORef 42

>>> modifyIORef' ref (\a -> a + 3)

>>> readIORef ref
45
Lifted version of newIORef.
>>> ref <- newIORef False

>>> :t ref
ref :: IORef Bool
Lifted version of readIORef.
>>> ref <- newIORef 42

>>> readIORef ref
42
Lifted version of writeIORef.
>>> ref <- newIORef 42

>>> writeIORef ref 43

>>> readIORef ref
43