monad-par-0.3.6: A library for parallel programming based on a monad
Safe HaskellSafe-Inferred
LanguageHaskell98

Control.Monad.Par.IO

Description

This module is an alternative version of Control.Monad.Par in which the Par type provides IO operations, by means of liftIO. The price paid is that only runParIO is available, not the pure runPar.

This module uses the same default scheduler as Control.Monad.Par.

Synopsis

Documentation

data ParIO a Source #

A wrapper around an underlying Par type which allows IO.

Instances

Instances details
MonadFix ParIO Source # 
Instance details

Defined in Control.Monad.Par.IO

Methods

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

MonadIO ParIO Source # 
Instance details

Defined in Control.Monad.Par.IO

Methods

liftIO :: IO a -> ParIO a #

Applicative ParIO Source # 
Instance details

Defined in Control.Monad.Par.IO

Methods

pure :: a -> ParIO a #

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

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

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

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

Functor ParIO Source # 
Instance details

Defined in Control.Monad.Par.IO

Methods

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

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

Monad ParIO Source # 
Instance details

Defined in Control.Monad.Par.IO

Methods

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

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

return :: a -> ParIO a #

ParFuture IVar ParIO Source # 
Instance details

Defined in Control.Monad.Par.IO

Methods

spawn :: NFData a => ParIO a -> ParIO (IVar a) #

spawn_ :: ParIO a -> ParIO (IVar a) #

get :: IVar a -> ParIO a #

spawnP :: NFData a => a -> ParIO (IVar a) #

ParIVar IVar ParIO Source # 
Instance details

Defined in Control.Monad.Par.IO

Methods

fork :: ParIO () -> ParIO () #

new :: ParIO (IVar a) #

put :: NFData a => IVar a -> a -> ParIO () #

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

newFull :: NFData a => a -> ParIO (IVar a) #

newFull_ :: a -> ParIO (IVar a) #

data IVar a Source #

Instances

Instances details
ParFuture IVar ParIO Source # 
Instance details

Defined in Control.Monad.Par.IO

Methods

spawn :: NFData a => ParIO a -> ParIO (IVar a) #

spawn_ :: ParIO a -> ParIO (IVar a) #

get :: IVar a -> ParIO a #

spawnP :: NFData a => a -> ParIO (IVar a) #

ParFuture IVar Par Source # 
Instance details

Defined in Control.Monad.Par.Scheds.Trace

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

Defined in Control.Monad.Par.IO

Methods

fork :: ParIO () -> ParIO () #

new :: ParIO (IVar a) #

put :: NFData a => IVar a -> a -> ParIO () #

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

newFull :: NFData a => a -> ParIO (IVar a) #

newFull_ :: a -> ParIO (IVar a) #

ParIVar IVar Par Source # 
Instance details

Defined in Control.Monad.Par.Scheds.Trace

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.TraceInternal

Methods

rnf :: IVar a -> () #

Eq (IVar a) Source #

Equality for IVars is physical equality, as with other reference types.

Instance details

Defined in Control.Monad.Par.Scheds.TraceInternal

Methods

(==) :: IVar a -> IVar a -> Bool #

(/=) :: IVar a -> IVar a -> Bool #

runParIO :: ParIO a -> IO a Source #

A run method which allows actual IO to occur on top of the Par monad. Of course this means that all the normal problems of parallel IO computations are present, including nondeterminism.

A simple example program:

 runParIO (liftIO $ putStrLn "hi" :: ParIO ())