| Safe Haskell | None |
|---|---|
| Language | Haskell98 |
Control.Monad.Par.Scheds.TraceInternal
Description
This module exposes the internals of the Par monad so that you
can build your own scheduler or other extensions. Do not use this
module for purposes other than extending the Par monad with new
functionality.
- data Trace
- data Sched = Sched {}
- newtype Par a = Par {}
- newtype IVar a = IVar (IORef (IVarContents a))
- data IVarContents a
- sched :: Bool -> Sched -> Trace -> IO ()
- runPar :: Par a -> a
- runParIO :: Par a -> IO a
- runParAsync :: Par a -> a
- new :: Par (IVar a)
- newFull :: NFData a => a -> Par (IVar a)
- newFull_ :: a -> Par (IVar a)
- get :: IVar a -> Par a
- put_ :: IVar a -> a -> Par ()
- put :: NFData a => IVar a -> a -> Par ()
- pollIVar :: IVar a -> IO (Maybe a)
- yield :: Par ()
Documentation
data Trace
data Sched
newtype Par a
newtype IVar a
Constructors
| IVar (IORef (IVarContents a)) |
data IVarContents a
A version that avoids an internal unsafePerformIO for calling
contexts that are already in the IO monad.
runParAsync :: Par a -> a
An asynchronous version in which the main thread of control in a Par computation can return while forked computations still run in the background.
read the value in a IVar. The get can only return when the
value has been written by a prior or parallel put to the same
IVar.
put :: NFData a => IVar a -> a -> Par ()
put a value into a IVar. Multiple puts to the same IVar
are not allowed, and result in a runtime error.
put fully evaluates its argument, which therefore must be an
instance of NFData. The idea is that this forces the work to
happen when we expect it, rather than being passed to the consumer
of the IVar and performed later, which often results in less
parallelism than expected.
Sometimes partial strictness is more appropriate: see put_.