| Copyright | (c) Nicolas Pouillard 2009-2017 |
|---|---|
| License | BSD3 |
| Maintainer | Nicolas Pouillard <nicolas.pouillard@gmail.com> |
| Stability | provisional |
| Safe Haskell | None |
| Language | Haskell98 |
Data.IORef.Strict
Description
- 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
A mutable variable in the IO monad
newIORef :: NFData sa => sa -> SIO (IORef sa) Source #
Build a new IORef, but deeply force the value before storing it.
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 sb Source #
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.
Internally this function is using Data.IORef.atomicModifyIORef'.