module Control.Monad.Par.Scheds.Trace (
Par, runPar, runParIO, fork,
IVar, new, newFull, newFull_, get, put, put_,
spawn, spawn_, spawnP
) where
import qualified Control.Monad.Par.Class as PC
import Control.Monad.Par.Scheds.TraceInternal
import Control.DeepSeq
import Control.Monad as M hiding (mapM, sequence, join)
import Prelude hiding (mapM, sequence, head,tail)
fork :: Par () -> Par ()
fork p = Par $ \c -> Fork (runCont p (\_ -> Done)) (c ())
spawn p = do r <- new; fork (p >>= put r); return r
spawn_ p = do r <- new; fork (p >>= put_ r); return r
spawnP :: NFData a => a -> Par (IVar a)
spawnP a = spawn (return a)
instance PC.ParFuture IVar Par where
get = get
spawn = spawn
spawn_ = spawn_
spawnP = spawnP
instance PC.ParIVar IVar Par where
fork = fork
new = new
put = put
put_ = put_
newFull = newFull
newFull_ = newFull_