Portability | non-portable (concurrency) |
---|---|
Stability | experimental |
Maintainer | libraries@haskell.org |
Safe Haskell | Trustworthy |
Sample variables
- data SampleVar a
- newEmptySampleVar :: IO (SampleVar a)
- newSampleVar :: a -> IO (SampleVar a)
- emptySampleVar :: SampleVar a -> IO ()
- readSampleVar :: SampleVar a -> IO a
- writeSampleVar :: SampleVar a -> a -> IO ()
- isEmptySampleVar :: SampleVar a -> IO Bool
Sample Variables
Sample variables are slightly different from a normal MVar
:
- Reading an empty
SampleVar
causes the reader to block. (same astakeMVar
on emptyMVar
) - Reading a filled
SampleVar
empties it and returns value. (same astakeMVar
) - Writing to an empty
SampleVar
fills it with a value, and potentially, wakes up a blocked reader (same as forputMVar
on emptyMVar
). - Writing to a filled
SampleVar
overwrites the current value. (different fromputMVar
on fullMVar
.)
newEmptySampleVar :: IO (SampleVar a)Source
Build a new, empty, SampleVar
newSampleVar :: a -> IO (SampleVar a)Source
Build a SampleVar
with an initial value.
emptySampleVar :: SampleVar a -> IO ()Source
If the SampleVar is full, leave it empty. Otherwise, do nothing.
readSampleVar :: SampleVar a -> IO aSource
Wait for a value to become available, then take it and return.
writeSampleVar :: SampleVar a -> a -> IO ()Source
Write a value into the SampleVar
, overwriting any previous value that
was there.
isEmptySampleVar :: SampleVar a -> IO BoolSource
Returns True
if the SampleVar
is currently empty.
Note that this function is only useful if you know that no other
threads can be modifying the state of the SampleVar
, because
otherwise the state of the SampleVar
may have changed by the time
you see the result of isEmptySampleVar
.