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

Safe HaskellNone
LanguageHaskell98

Control.Monad.Par.Scheds.Direct

Contents

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

Documentation

data Sched Source #

Constructors

Sched 

Fields

Instances
MonadReader Sched Par Source # 
Instance details

Defined in Control.Monad.Par.Scheds.DirectInternal

Methods

ask :: Par Sched #

local :: (Sched -> Sched) -> Par a -> Par a #

reader :: (Sched -> a) -> Par a #

data Par a Source #

Instances
Monad Par Source # 
Instance details

Defined in Control.Monad.Par.Scheds.DirectInternal

Methods

(>>=) :: Par a -> (a -> Par b) -> Par b #

(>>) :: Par a -> Par b -> Par b #

return :: a -> Par a #

fail :: String -> Par a #

Functor Par Source # 
Instance details

Defined in Control.Monad.Par.Scheds.DirectInternal

Methods

fmap :: (a -> b) -> Par a -> Par b #

(<$) :: a -> Par b -> Par a #

MonadFix Par Source # 
Instance details

Defined in Control.Monad.Par.Scheds.DirectInternal

Methods

mfix :: (a -> Par a) -> Par a #

Applicative Par Source # 
Instance details

Defined in Control.Monad.Par.Scheds.DirectInternal

Methods

pure :: a -> Par a #

(<*>) :: Par (a -> b) -> Par a -> Par b #

liftA2 :: (a -> b -> c) -> Par a -> Par b -> Par c #

(*>) :: Par a -> Par b -> Par b #

(<*) :: Par a -> Par b -> Par a #

MonadCont Par Source # 
Instance details

Defined in Control.Monad.Par.Scheds.DirectInternal

Methods

callCC :: ((a -> Par b) -> Par a) -> Par a #

ParUnsafe IVar Par Source # 
Instance details

Defined in Control.Monad.Par.Scheds.Direct

Methods

unsafePeek :: IVar a -> Par (Maybe a) #

unsafeTryPut :: IVar a -> a -> Par a #

unsafeParIO :: IO a -> Par a #

ParFuture IVar Par Source # 
Instance details

Defined in Control.Monad.Par.Scheds.Direct

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 Source # 
Instance details

Defined in Control.Monad.Par.Scheds.Direct

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

MonadReader Sched Par Source # 
Instance details

Defined in Control.Monad.Par.Scheds.DirectInternal

Methods

ask :: Par Sched #

local :: (Sched -> Sched) -> Par a -> Par a #

reader :: (Sched -> a) -> Par a #

newtype IVar a Source #

Constructors

IVar (IORef (IVarContents a)) 
Instances
ParUnsafe IVar Par Source # 
Instance details

Defined in Control.Monad.Par.Scheds.Direct

Methods

unsafePeek :: IVar a -> Par (Maybe a) #

unsafeTryPut :: IVar a -> a -> Par a #

unsafeParIO :: IO a -> Par a #

ParFuture IVar Par Source # 
Instance details

Defined in Control.Monad.Par.Scheds.Direct

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 Source # 
Instance details

Defined in Control.Monad.Par.Scheds.Direct

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

NFData (IVar a) Source # 
Instance details

Defined in Control.Monad.Par.Scheds.Direct

Methods

rnf :: IVar a -> () #

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

fixPar :: (a -> Par a) -> Par a Source #

Take the monadic fixpoint of a Par computation. This is the definition of mfix for Par. Throws FixParException if the result is demanded strictly within the computation.

Orphan instances

ParUnsafe IVar Par Source # 
Instance details

Methods

unsafePeek :: IVar a -> Par (Maybe a) #

unsafeTryPut :: IVar a -> a -> Par a #

unsafeParIO :: IO a -> Par a #

ParFuture IVar Par Source # 
Instance details

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 Source # 
Instance details

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