Control.Monad.Par.Scheds.Direct

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

Safe Haskell | None
Language | Haskell98

Control.Monad.Par.Scheds.Direct

Contents

- Orphan instances

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 #

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 # |
Methods ask :: Par Sched # local :: (Sched -> Sched) -> Par a -> Par a # reader :: (Sched -> a) -> Par a #

data Par a #

Instances

Monad Par # |
Methods (>>=) :: Par a -> (a -> Par b) -> Par b # (>>) :: Par a -> Par b -> Par b # return :: a -> Par a # fail :: String -> Par a #
Functor Par # |
Methods fmap :: (a -> b) -> Par a -> Par b # (<$) :: a -> Par b -> Par a #
Applicative Par # |
Methods pure :: a -> Par a # (<*>) :: Par (a -> b) -> Par a -> Par b # (*>) :: Par a -> Par b -> Par b # (<*) :: Par a -> Par b -> Par a #
MonadCont Par # |
Methods callCC :: ((a -> Par b) -> Par a) -> Par a #
MonadReader Sched Par # |
Methods ask :: Par Sched # local :: (Sched -> Sched) -> Par a -> Par a # reader :: (Sched -> a) -> Par a #

newtype IVar a #

Constructors

IVar (IORef (IVarContents a)) |

Instances

NFData (IVar a) # |
Methods rnf :: IVar a -> () #

data IVarContents a #

Constructors

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

runPar :: Par a -> a #

runParIO :: Par a -> IO a #

new :: Par (IVar a) #

Creates a new `IVar`

get :: IVar a -> Par a #

Read the value in an `IVar`. The `get` operation can only return when the value has been written by a prior or parallel `put` to the same `IVar`.

put_ :: IVar a -> a -> Par () #

`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 () #

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

# Orphan instances

ParFuture IVar Par # |
Methods spawn :: NFData a => Par a -> Par (IVar a) # spawn_ :: Par a -> Par (IVar a) # get :: IVar a -> Par a # spawnP :: NFData a => a -> Par (IVar a) #
ParIVar IVar Par # |
Methods fork :: Par () -> Par () # new :: Par (IVar a) # put :: NFData a => IVar a -> a -> Par () # put_ :: IVar a -> a -> Par () # newFull :: NFData a => a -> Par (IVar a) # newFull_ :: a -> Par (IVar a) #
ParUnsafe IVar Par # |
Methods unsafePeek :: IVar a -> Par (Maybe a) # unsafeTryPut :: IVar a -> a -> Par a # unsafeParIO :: IO a -> Par a #