base-4.3.1.0: Basic libraries

Portability | portable
Stability | experimental
Maintainer | libraries@haskell.org

Data.IORef

Contents

- IORefs

Description

Mutable references in the IO monad.

Synopsis

- data IORef a
- newIORef :: a -> IO (IORef a)
- readIORef :: IORef a -> IO a
- writeIORef :: IORef a -> a -> IO ()
- modifyIORef :: IORef a -> (a -> a) -> IO ()
- atomicModifyIORef :: IORef a -> (a -> (a, b)) -> IO b
- mkWeakIORef :: IORef a -> IO () -> IO (Weak (IORef a))

# IORefs

data IORef a

A mutable variable in the `IO` monad

Instances

Typeable1 IORef |
Eq (IORef a) |

newIORef :: a -> IO (IORef a)

Build a new `IORef`

readIORef :: IORef a -> IO a

Read the value of an `IORef`

writeIORef :: IORef a -> a -> IO ()

Write a new value into an `IORef`

modifyIORef :: IORef a -> (a -> a) -> IO ()

Mutate the contents of an `IORef`

atomicModifyIORef :: IORef a -> (a -> (a, b)) -> IO b

Atomically modifies the contents of an `IORef`.

This function is useful for using `IORef` in a safe way in a multithreaded program. If you only have one `IORef`, then using `atomicModifyIORef` to access and modify it will prevent race conditions.

Extending the atomicity to multiple `IORef`s is problematic, so it is recommended that if you need to do anything more complicated then using `Control.Concurrent.MVar.MVar` instead is a good idea.

mkWeakIORef :: IORef a -> IO () -> IO (Weak (IORef a))

Make a `Weak` pointer to an `IORef`