Safe Haskell | Trustworthy |
---|
IVars are the very simplest form of LVars. They are either empty or full, and contain at most a single value.
For further information on using IVars in Haskell, see the monad-par
and
meta-par
packages and papers:
- http://hackage.haskell.org/package/monad-par
- http://www.cs.indiana.edu/~rrnewton/papers/haskell2011_monad-par.pdf
- http://hackage.haskell.org/package/meta-par
- http://www.cs.indiana.edu/~rrnewton/papers/2012-ICFP_meta-par.pdf
Unlike the IVar
type provided by monad-par
, the IVar
type
provided in this module permits repeated put
s of the same value, in
keeping with the lattice-based semantics of LVars in which a put
takes the least upper bound of the old and new values.
- newtype IVar s a = IVar (LVar s (IORef (Maybe a)) a)
- new :: Par d s (IVar s a)
- get :: IVar s a -> Par d s a
- put :: (Eq a, NFData a) => IVar s a -> a -> Par d s ()
- put_ :: Eq a => IVar s a -> a -> Par d s ()
- spawn :: (Eq a, NFData a) => Par d s a -> Par d s (IVar s a)
- spawn_ :: Eq a => Par d s a -> Par d s (IVar s a)
- spawnP :: (Eq a, NFData a) => a -> Par d s (IVar s a)
- freezeIVar :: IVar s a -> Par QuasiDet s (Maybe a)
- fromIVar :: IVar Frzn a -> Maybe a
- whenFull :: Maybe HandlerPool -> IVar s a -> (a -> Par d s ()) -> Par d s ()
Documentation
LVarWBottom IVar | |
LVarData1 IVar | An |
Foldable (IVar Trvrsbl) | |
Eq (IVar s a) | Physical equality, just as with |
Show a => Show (IVar Trvrsbl a) | For convenience only; the user could define this. |
Show a => Show (IVar Frzn a) | |
DeepFrz a => DeepFrz (IVar s a) |
Basic IVar operations, same as in monad-par
get :: IVar s a -> Par d s aSource
Read the value in a IVar. The get
can only return when the
value has been written by a prior or concurrent put
to the same
IVar.
put_ :: Eq a => IVar s a -> a -> Par d s ()Source
Put a value into an IVar. Multiple put
s to the same IVar
are not allowed, and result in a runtime error, unless the values put happen to be (==)
.
This function is always at least strict up to WHNF in the element put.
Derived IVar operations, same as in monad-par
spawn :: (Eq a, NFData a) => Par d s a -> Par d s (IVar s a)Source
A simple future represented as an IVar. The result is fully evaluated before the child computation returns.
spawn_ :: Eq a => Par d s a -> Par d s (IVar s a)Source
A version of spawn
that uses only WHNF, rather than full NFData
.
LVar-style operations
freezeIVar :: IVar s a -> Par QuasiDet s (Maybe a)Source
A specialized freezing operation for IVars that leaves the result in a handy format (Maybe
).