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

Safe HaskellNone
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 #

A wrapper around an underlying Par type which allows IO.

Instances

Monad ParIO # 

Methods

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

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

return :: a -> ParIO a #

fail :: String -> ParIO a #

Functor ParIO # 

Methods

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

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

Applicative ParIO # 

Methods

pure :: a -> ParIO a #

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

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

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

MonadIO ParIO # 

Methods

liftIO :: IO a -> ParIO a #

ParFuture IVar ParIO # 

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 # 

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 #

Instances

ParFuture IVar ParIO # 

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 # 

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

Eq (IVar a) #

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

Methods

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

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

NFData (IVar a) # 

Methods

rnf :: IVar a -> () #

runParIO :: ParIO a -> IO a #

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

A simple example program:

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