monad-par-0.3.4.7: A library for parallel programming based on a monad

Safe Haskell | None
Language | Haskell98

Control.Monad.Par.Scheds.Direct

Description

A scheduler for the Par monad based on directly performing IO actions when Par methods are called (i.e. without using a lazy trace data structure).

Synopsis

- data Sched = Sched {
  - no :: !Int
  - workpool :: WSDeque (Par ())
  - rng :: HotVar GenIO
  - isMain :: Bool
  - sessions :: HotVar [Session]
  - idle :: HotVar [MVar Bool]
  - scheds :: [Sched]
  - activeSessions :: HotVar (Set SessionID)
  - sessionCounter :: HotVar SessionID
  }
- data Par a
- newtype IVar a = IVar (IORef (IVarContents a))
- data IVarContents a
  - = Full a
  - | Empty
  - | Blocked [a -> IO ()]
- runPar :: Par a -> a
- runParIO :: Par a -> IO a
- new :: Par (IVar a)
- get :: IVar a -> Par a
- put_ :: IVar a -> a -> Par ()
- fork :: Par () -> Par ()
- newFull :: NFData a => a -> Par (IVar a)
- newFull_ :: a -> Par (IVar a)
- put :: NFData a => IVar a -> a -> Par ()
- spawn :: NFData a => Par a -> Par (IVar a)
- spawn_ :: Par a -> Par (IVar a)
- spawnP :: NFData a => a -> Par (IVar a)
- spawn1_ :: (a -> Par b) -> a -> Par (IVar b)

# Documentation

data Sched Source

Constructors

Sched |

Fields

no :: !Int
workpool :: WSDeque (Par ())
rng :: HotVar GenIO
isMain :: Bool
sessions :: HotVar [Session]
idle :: HotVar [MVar Bool]
scheds :: [Sched]
activeSessions :: HotVar (Set SessionID)
sessionCounter :: HotVar SessionID

Instances

MonadReader Sched Par Source |

data Par a Source

Instances

Monad Par Source |
Functor Par Source |
Applicative Par Source |
MonadCont Par Source |
MonadReader Sched Par Source |

newtype IVar a Source

Constructors

IVar (IORef (IVarContents a)) |

Instances

NFData (IVar a) Source |

data IVarContents a Source

Constructors

Full a |
Empty |
Blocked [a -> IO ()] |

runPar :: Par a -> a Source

runParIO :: Par a -> IO a Source

new :: Par (IVar a) Source

creates a new `IVar`

get :: IVar a -> Par a Source

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_ :: IVar a -> a -> Par () Source

`put_` is a version of `put` that is head-strict rather than fully-strict. In this scheduler, puts immediately execute woken work in the current thread.

fork :: Par () -> Par () Source

newFull :: NFData a => a -> Par (IVar a) Source

newFull_ :: a -> Par (IVar a) Source

put :: NFData a => IVar a -> a -> Par () Source

spawn :: NFData a => Par a -> Par (IVar a) Source

spawn_ :: Par a -> Par (IVar a) Source

spawnP :: NFData a => a -> Par (IVar a) Source

spawn1_ :: (a -> Par b) -> a -> Par (IVar b) Source