| Haskell Hierarchical Libraries (base package) | Contents | Index

Control.Concurrent.SampleVar

Portability | non-portable (concurrency)
Stability | experimental
Maintainer | libraries@haskell.org

Contents

Sample Variables

Description
Sample variables
Synopsis

type SampleVar a = MVar (Int, MVar 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
type SampleVar a = MVar (Int, MVar a)

Sample variables are slightly different from a normal `MVar`:

- Reading an empty `SampleVar` causes the reader to block. (same as `takeMVar` on empty `MVar`)
- Reading a filled `SampleVar` empties it and returns value. (same as `takeMVar`)
- Writing to an empty `SampleVar` fills it with a value, and potentially, wakes up a blocked reader (same as for `putMVar` on empty `MVar`).
- Writing to a filled `SampleVar` overwrites the current value. (different from `putMVar` on full `MVar`.)

newEmptySampleVar :: IO (SampleVar a)
Build a new, empty, `SampleVar`
newSampleVar :: a -> IO (SampleVar a)
Build a `SampleVar` with an initial value.
emptySampleVar :: SampleVar a -> IO ()
If the SampleVar is full, leave it empty. Otherwise, do nothing.
readSampleVar :: SampleVar a -> IO a
Wait for a value to become available, then take it and return.
writeSampleVar :: SampleVar a -> a -> IO ()
Write a value into the `SampleVar`, overwriting any previous value that was there.
isEmptySampleVar :: SampleVar a -> IO Bool
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`.
Produced by Haddock version 0.7