base-4.2.0.1: Basic librariesSource codeContentsIndex
Control.Concurrent.SampleVar
Portabilitynon-portable (concurrency)
Stabilityexperimental
Maintainerlibraries@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)Source

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)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.

Produced by Haddock version 2.6.1