-- | -- Module : Simulation.Aivika.Trans.Process -- Copyright : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental -- Tested with: GHC 8.0.1 -- -- A value in the 'Process' monad represents a discontinuous process that -- can suspend in any simulation time point and then resume later in the same -- or another time point. -- -- The process of this type can involve the 'Event', 'Dynamics' and 'Simulation' -- computations. Moreover, a value in the @Process@ monad can be run within -- the @Event@ computation. -- -- A value of the 'ProcessId' type is just an identifier of such a process. -- -- The characteristic property of the @Process@ type is function 'holdProcess' -- that suspends the current process for the specified time interval. -- module Simulation.Aivika.Trans.Process (-- * Process Monad ProcessId, Process, ProcessLift(..), -- * Running Process runProcess, runProcessUsingId, runProcessInStartTime, runProcessInStartTimeUsingId, runProcessInStopTime, runProcessInStopTimeUsingId, -- * Spawning Processes spawnProcess, spawnProcessUsingId, spawnProcessWith, spawnProcessUsingIdWith, -- * Enqueueing Process enqueueProcess, enqueueProcessUsingId, -- * Creating Process Identifier newProcessId, processId, processUsingId, -- * Holding, Interrupting, Passivating and Canceling Process holdProcess, interruptProcess, processInterrupted, processInterruptionTime, passivateProcess, passivateProcessBefore, processPassive, reactivateProcess, reactivateProcessImmediately, cancelProcessWithId, cancelProcess, processCancelled, processCancelling, whenCancellingProcess, -- * Awaiting Signal processAwait, -- * Preemption processPreemptionBeginning, processPreemptionEnding, -- * Yield of Process processYield, -- * Process Timeout timeoutProcess, timeoutProcessUsingId, -- * Parallelizing Processes processParallel, processParallelUsingIds, processParallel_, processParallelUsingIds_, -- * Exception Handling catchProcess, finallyProcess, throwProcess, -- * Process Priority processWithPriority, -- * Utilities zipProcessParallel, zip3ProcessParallel, unzipProcess, -- * Memoizing Process memoProcess, -- * Never Ending Process neverProcess, -- * Retrying Computation retryProcess, -- * GoTo Statement transferProcess, -- * Debugging traceProcess) where import Simulation.Aivika.Trans.Internal.Simulation import Simulation.Aivika.Trans.Internal.Dynamics import Simulation.Aivika.Trans.Internal.Event import Simulation.Aivika.Trans.Internal.Process