-- | -- Module : Simulation.Aivika.Event -- 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 -- -- The module defines the 'Event' monad which is very similar to the 'Dynamics' -- monad but only now the computation is strongly synchronized with the event queue. -- -- The @Dynamics@ computation is defined in all time points simultaneously, while -- the @Event@ computation can be described in every time point differently and can change -- in discrete steps. Therefore, the former is destined for differential and difference -- equations of System Dynamics, while the latter is destined for discrete event simulation, -- being its core actually. -- module Simulation.Aivika.Event (-- * Event Monad Event, EventLift(..), EventProcessing(..), runEvent, runEventWith, runEventInStartTime, runEventInStopTime, -- * Event Queue EventPriority(..), enqueueEvent, enqueueEventWithPriority, enqueueEventWithCancellation, enqueueEventWithStartTime, enqueueEventWithStopTime, enqueueEventWithTimes, enqueueEventWithIntegTimes, yieldEvent, eventQueueCount, eventPriority, -- * Cancelling Event EventCancellation, cancelEvent, eventCancelled, eventFinished, -- * Error Handling catchEvent, finallyEvent, throwEvent, -- * Memoization memoEvent, memoEventInTime, -- * Disposable DisposableEvent(..), -- * Retrying Computation retryEvent, -- * Debugging traceEvent) where import Simulation.Aivika.Internal.Event