Copyright | (c) 2019 Composewell Technologies |
---|---|
License | BSD3 |
Maintainer | streamly@composewell.com |
Stability | experimental |
Portability | GHC |
Safe Haskell | None |
Language | Haskell2010 |
A mutable variable in a mutation capable monad (IO) holding a Prim
value. This allows fast modification because of unboxed storage.
Multithread Consistency Notes
In general, any value that straddles a machine word cannot be guaranteed to
be consistently read from another thread without a lock. GHC heap objects
are always machine word aligned, therefore, a IORef
is also word aligned.
On a 64-bit platform, writing a 64-bit aligned type from one thread and
reading it from another thread should give consistent old or new value. The
same holds true for 32-bit values on a 32-bit platform.
Synopsis
- data IORef a
- class Prim a
- newIORef :: forall a. Prim a => a -> IO (IORef a)
- writeIORef :: Prim a => IORef a -> a -> IO ()
- modifyIORef' :: Prim a => IORef a -> (a -> a) -> IO ()
- readIORef :: Prim a => IORef a -> IO a
- toStream :: (IsStream t, MonadIO m, Prim a) => IORef a -> t m a
- toStreamD :: (MonadIO m, Prim a) => IORef a -> Stream m a
Documentation
Class of types supporting primitive array operations. This includes
interfacing with GC-managed memory (functions suffixed with ByteArray#
)
and interfacing with unmanaged memory (functions suffixed with Addr#
).
Endianness is platform-dependent.
sizeOf#, alignment#, indexByteArray#, readByteArray#, writeByteArray#, setByteArray#, indexOffAddr#, readOffAddr#, writeOffAddr#, setOffAddr#
Instances
Construction
Write
modifyIORef' :: Prim a => IORef a -> (a -> a) -> IO () Source #
Modify the value of an IORef
using a function with strict application.
Pre-release