strict-io-0.1: A library wrapping standard IO modules to provide strict IO.Source codeContentsIndex
Data.IORef.Strict
Stabilityprovisional
MaintainerNicolas Pouillard <nicolas.pouillard@gmail.com>
Description

Mutable references of strict values in the SIO monad.

The type of references remains the same as in the IO monad and is just re-exported here.

Synopsis
data IORef a
newIORef :: NFData sa => sa -> SIO (IORef sa)
readIORef :: IORef a -> SIO a
writeIORef :: NFData sa => IORef sa -> sa -> SIO ()
modifyIORef :: NFData sa => IORef sa -> (sa -> sa) -> SIO ()
atomicModifyIORef :: (NFData sa, NFData sb) => IORef sa -> (sa -> (sa, sb)) -> SIO sb
mkWeakIORef :: IORef a -> SIO () -> SIO (Weak (IORef a))
Documentation
data IORef a Source
A mutable variable in the IO monad
show/hide Instances
Eq (IORef a)
newIORef :: NFData sa => sa -> SIO (IORef sa)Source
Build a new IORef, but force the value before storing it.
readIORef :: IORef a -> SIO aSource
Read the value of an IORef
writeIORef :: NFData sa => IORef sa -> sa -> SIO ()Source
Deeply force a value and write it into an IORef
modifyIORef :: NFData sa => IORef sa -> (sa -> sa) -> SIO ()Source
Mutate the contents of an IORef
atomicModifyIORef :: (NFData sa, NFData sb) => IORef sa -> (sa -> (sa, sb)) -> SIO sbSource

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 IORefs 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 -> SIO () -> SIO (Weak (IORef a))Source
Make a Weak pointer to an IORef
Produced by Haddock version 2.6.0