packages feed

aivika-transformers 5.0.1 → 5.1

raw patch · 104 files changed

+2005/−274 lines, 104 filesdep ~aivikadep ~basePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: aivika, base

API changes (from Hackage documentation)

- Simulation.Aivika.IO.Ref.Base: instance Simulation.Aivika.Trans.Ref.Base.MonadRef GHC.Types.IO
- Simulation.Aivika.IO.Ref.Base: instance Simulation.Aivika.Trans.Ref.Base.MonadRef0 GHC.Types.IO
- Simulation.Aivika.Trans.Ref: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Observable.Observable (Simulation.Aivika.Trans.Ref.Base.Ref m) (t m)) => Simulation.Aivika.Trans.Observable.Observable (Simulation.Aivika.Trans.Ref.Ref m) (t m)
- Simulation.Aivika.Trans.Ref.Base: class Monad m => MonadRef m where data Ref m a where {
- Simulation.Aivika.Trans.Ref.Base: class MonadRef m => MonadRef0 m
- Simulation.Aivika.Trans.Ref.Base: data family Ref m a;
- Simulation.Aivika.Trans.Ref.Base: equalRef :: MonadRef m => Ref m a -> Ref m a -> Bool
- Simulation.Aivika.Trans.Ref.Base: instance (GHC.Base.Monad m, Simulation.Aivika.Trans.Ref.Base.MonadRef m) => Simulation.Aivika.Trans.Observable.Observable (Simulation.Aivika.Trans.Ref.Base.Ref m) (Simulation.Aivika.Trans.Internal.Types.Event m)
- Simulation.Aivika.Trans.Ref.Base: instance Simulation.Aivika.Trans.Ref.Base.MonadRef m => GHC.Classes.Eq (Simulation.Aivika.Trans.Ref.Base.Ref m a)
- Simulation.Aivika.Trans.Ref.Base: modifyRef :: MonadRef m => Ref m a -> (a -> a) -> Event m ()
- Simulation.Aivika.Trans.Ref.Base: newRef :: MonadRef m => a -> Simulation m (Ref m a)
- Simulation.Aivika.Trans.Ref.Base: newRef0 :: MonadRef0 m => a -> m (Ref m a)
- Simulation.Aivika.Trans.Ref.Base: readRef :: MonadRef m => Ref m a -> Event m a
- Simulation.Aivika.Trans.Ref.Base: writeRef :: MonadRef m => Ref m a -> a -> Event m ()
- Simulation.Aivika.Trans.Ref.Base: }
- Simulation.Aivika.Trans.Results: instance (GHC.Arr.Ix i, GHC.Show.Show i, Simulation.Aivika.Trans.Results.ResultComputing t m) => Simulation.Aivika.Trans.Results.ResultProvider (t m (GHC.Arr.Array i GHC.Types.Double)) m
- Simulation.Aivika.Trans.Results: instance (GHC.Arr.Ix i, GHC.Show.Show i, Simulation.Aivika.Trans.Results.ResultComputing t m) => Simulation.Aivika.Trans.Results.ResultProvider (t m (GHC.Arr.Array i GHC.Types.Int)) m
- Simulation.Aivika.Trans.Results: instance Simulation.Aivika.Trans.DES.MonadDES m => Simulation.Aivika.Trans.Results.ResultComputing Simulation.Aivika.Trans.Ref.Base.Ref m
- Simulation.Aivika.Trans.Results: instance Simulation.Aivika.Trans.Results.ResultComputing t m => Simulation.Aivika.Trans.Results.ResultProvider (t m (Data.Vector.Vector GHC.Types.Double)) m
- Simulation.Aivika.Trans.Results: instance Simulation.Aivika.Trans.Results.ResultComputing t m => Simulation.Aivika.Trans.Results.ResultProvider (t m (Data.Vector.Vector GHC.Types.Int)) m
- Simulation.Aivika.Trans.Results: instance Simulation.Aivika.Trans.Results.ResultComputing t m => Simulation.Aivika.Trans.Results.ResultProvider (t m (Simulation.Aivika.Statistics.SamplingCounter GHC.Types.Double)) m
- Simulation.Aivika.Trans.Results: instance Simulation.Aivika.Trans.Results.ResultComputing t m => Simulation.Aivika.Trans.Results.ResultProvider (t m (Simulation.Aivika.Statistics.SamplingCounter GHC.Types.Int)) m
- Simulation.Aivika.Trans.Results: instance Simulation.Aivika.Trans.Results.ResultComputing t m => Simulation.Aivika.Trans.Results.ResultProvider (t m (Simulation.Aivika.Statistics.SamplingStats GHC.Types.Double)) m
- Simulation.Aivika.Trans.Results: instance Simulation.Aivika.Trans.Results.ResultComputing t m => Simulation.Aivika.Trans.Results.ResultProvider (t m (Simulation.Aivika.Statistics.SamplingStats GHC.Types.Int)) m
- Simulation.Aivika.Trans.Results: instance Simulation.Aivika.Trans.Results.ResultComputing t m => Simulation.Aivika.Trans.Results.ResultProvider (t m (Simulation.Aivika.Statistics.TimingCounter GHC.Types.Double)) m
- Simulation.Aivika.Trans.Results: instance Simulation.Aivika.Trans.Results.ResultComputing t m => Simulation.Aivika.Trans.Results.ResultProvider (t m (Simulation.Aivika.Statistics.TimingCounter GHC.Types.Int)) m
- Simulation.Aivika.Trans.Results: instance Simulation.Aivika.Trans.Results.ResultComputing t m => Simulation.Aivika.Trans.Results.ResultProvider (t m (Simulation.Aivika.Statistics.TimingStats GHC.Types.Double)) m
- Simulation.Aivika.Trans.Results: instance Simulation.Aivika.Trans.Results.ResultComputing t m => Simulation.Aivika.Trans.Results.ResultProvider (t m (Simulation.Aivika.Statistics.TimingStats GHC.Types.Int)) m
- Simulation.Aivika.Trans.Results: instance Simulation.Aivika.Trans.Results.ResultComputing t m => Simulation.Aivika.Trans.Results.ResultProvider (t m GHC.Base.String) m
- Simulation.Aivika.Trans.Results: instance Simulation.Aivika.Trans.Results.ResultComputing t m => Simulation.Aivika.Trans.Results.ResultProvider (t m GHC.Types.Double) m
- Simulation.Aivika.Trans.Results: instance Simulation.Aivika.Trans.Results.ResultComputing t m => Simulation.Aivika.Trans.Results.ResultProvider (t m GHC.Types.Int) m
- Simulation.Aivika.Trans.Results: instance Simulation.Aivika.Trans.Results.ResultComputing t m => Simulation.Aivika.Trans.Results.ResultProvider (t m [GHC.Types.Double]) m
- Simulation.Aivika.Trans.Results: instance Simulation.Aivika.Trans.Results.ResultComputing t m => Simulation.Aivika.Trans.Results.ResultProvider (t m [GHC.Types.Int]) m
+ Simulation.Aivika.IO.Ref.Base.Lazy: instance Simulation.Aivika.Trans.Ref.Base.Lazy.MonadRef GHC.Types.IO
+ Simulation.Aivika.IO.Ref.Base.Lazy: instance Simulation.Aivika.Trans.Ref.Base.Lazy.MonadRef0 GHC.Types.IO
+ Simulation.Aivika.IO.Ref.Base.Strict: instance Simulation.Aivika.Trans.Ref.Base.Strict.MonadRef GHC.Types.IO
+ Simulation.Aivika.IO.Ref.Base.Strict: instance Simulation.Aivika.Trans.Ref.Base.Strict.MonadRef0 GHC.Types.IO
+ Simulation.Aivika.Trans.Activity: resetActivity :: MonadDES m => Activity m s a b -> Event m ()
+ Simulation.Aivika.Trans.Arrival: resetArrivalTimer :: MonadDES m => ArrivalTimer m -> Event m ()
+ Simulation.Aivika.Trans.Composite: class CompositeLift t m
+ Simulation.Aivika.Trans.Composite: instance GHC.Base.Monad m => Simulation.Aivika.Trans.Composite.CompositeLift Simulation.Aivika.Trans.Composite.Composite m
+ Simulation.Aivika.Trans.Composite: liftComposite :: CompositeLift t m => Composite m a -> t m a
+ Simulation.Aivika.Trans.Concurrent.MVar: withMVarComp :: (MonadComp m, MonadIO m) => MVar a -> (a -> m b) -> m b
+ Simulation.Aivika.Trans.Concurrent.MVar: withMVarDynamics :: (MonadComp m, MonadIO m) => MVar a -> (a -> Dynamics m b) -> Dynamics m b
+ Simulation.Aivika.Trans.Concurrent.MVar: withMVarEvent :: (MonadComp m, MonadIO m) => MVar a -> (a -> Event m b) -> Event m b
+ Simulation.Aivika.Trans.Concurrent.MVar: withMVarParameter :: (MonadComp m, MonadIO m) => MVar a -> (a -> Parameter m b) -> Parameter m b
+ Simulation.Aivika.Trans.Concurrent.MVar: withMVarProcess :: (MonadDES m, MonadIO m) => MVar a -> (a -> Process m b) -> Process m b
+ Simulation.Aivika.Trans.Concurrent.MVar: withMVarSimulation :: (MonadComp m, MonadIO m) => MVar a -> (a -> Simulation m b) -> Simulation m b
+ Simulation.Aivika.Trans.Gate: invertGate :: MonadDES m => Gate m -> Event m ()
+ Simulation.Aivika.Trans.Generator: generateSequenceNo :: MonadGenerator m => Generator m -> m Int
+ Simulation.Aivika.Trans.Internal.Cont: CancelChildAfterParent :: ContCancellation
+ Simulation.Aivika.Trans.Internal.Cont: CancelInIsolation :: ContCancellation
+ Simulation.Aivika.Trans.Internal.Cont: CancelParentAfterChild :: ContCancellation
+ Simulation.Aivika.Trans.Internal.Cont: CancelTogether :: ContCancellation
+ Simulation.Aivika.Trans.Internal.Cont: Cont :: (ContParams m a -> Event m ()) -> Cont m a
+ Simulation.Aivika.Trans.Internal.Cont: ContCancellationInitiating :: ContEvent
+ Simulation.Aivika.Trans.Internal.Cont: ContPreemptionBeginning :: ContEvent
+ Simulation.Aivika.Trans.Internal.Cont: ContPreemptionEnding :: ContEvent
+ Simulation.Aivika.Trans.Internal.Cont: catchCont :: (MonadDES m, Exception e) => Cont m a -> (e -> Cont m a) -> Cont m a
+ Simulation.Aivika.Trans.Internal.Cont: contAwait :: MonadDES m => Signal m a -> Cont m a
+ Simulation.Aivika.Trans.Internal.Cont: contCanceled :: ContParams m a -> Event m Bool
+ Simulation.Aivika.Trans.Internal.Cont: contCancellationActivated :: MonadDES m => ContId m -> Event m Bool
+ Simulation.Aivika.Trans.Internal.Cont: contCancellationBind :: MonadDES m => ContId m -> [ContId m] -> Event m (DisposableEvent m)
+ Simulation.Aivika.Trans.Internal.Cont: contCancellationConnect :: MonadDES m => ContId m -> ContCancellation -> ContId m -> Event m (DisposableEvent m)
+ Simulation.Aivika.Trans.Internal.Cont: contCancellationInitiate :: MonadDES m => ContId m -> Event m ()
+ Simulation.Aivika.Trans.Internal.Cont: contCancellationInitiated :: MonadDES m => ContId m -> Event m Bool
+ Simulation.Aivika.Trans.Internal.Cont: contCancellationInitiating :: MonadDES m => ContId m -> Signal m ()
+ Simulation.Aivika.Trans.Internal.Cont: contParallel :: MonadDES m => [(Cont m a, ContId m)] -> Cont m [a]
+ Simulation.Aivika.Trans.Internal.Cont: contParallel_ :: MonadDES m => [(Cont m a, ContId m)] -> Cont m ()
+ Simulation.Aivika.Trans.Internal.Cont: contPreemptionBegin :: MonadDES m => ContId m -> Event m ()
+ Simulation.Aivika.Trans.Internal.Cont: contPreemptionBeginning :: MonadDES m => ContId m -> Signal m ()
+ Simulation.Aivika.Trans.Internal.Cont: contPreemptionBegun :: MonadDES m => ContId m -> Event m Bool
+ Simulation.Aivika.Trans.Internal.Cont: contPreemptionEnd :: MonadDES m => ContId m -> Event m ()
+ Simulation.Aivika.Trans.Internal.Cont: contPreemptionEnding :: MonadDES m => ContId m -> Signal m ()
+ Simulation.Aivika.Trans.Internal.Cont: contSignal :: ContId m -> Signal m ContEvent
+ Simulation.Aivika.Trans.Internal.Cont: data ContCancellation
+ Simulation.Aivika.Trans.Internal.Cont: data ContEvent
+ Simulation.Aivika.Trans.Internal.Cont: data ContId m
+ Simulation.Aivika.Trans.Internal.Cont: data ContParams m a
+ Simulation.Aivika.Trans.Internal.Cont: data FrozenCont m a
+ Simulation.Aivika.Trans.Internal.Cont: finallyCont :: MonadDES m => Cont m a -> Cont m b -> Cont m a
+ Simulation.Aivika.Trans.Internal.Cont: freezeCont :: MonadDES m => ContParams m a -> Event m (FrozenCont m a)
+ Simulation.Aivika.Trans.Internal.Cont: freezeContReentering :: MonadDES m => ContParams m a -> a -> Event m () -> Event m (FrozenCont m a)
+ Simulation.Aivika.Trans.Internal.Cont: instance (Simulation.Aivika.Trans.DES.MonadDES m, Control.Monad.IO.Class.MonadIO m) => Control.Monad.IO.Class.MonadIO (Simulation.Aivika.Trans.Internal.Cont.Cont m)
+ Simulation.Aivika.Trans.Internal.Cont: instance GHC.Classes.Eq Simulation.Aivika.Trans.Internal.Cont.ContEvent
+ Simulation.Aivika.Trans.Internal.Cont: instance GHC.Classes.Ord Simulation.Aivika.Trans.Internal.Cont.ContEvent
+ Simulation.Aivika.Trans.Internal.Cont: instance GHC.Show.Show Simulation.Aivika.Trans.Internal.Cont.ContEvent
+ Simulation.Aivika.Trans.Internal.Cont: instance Simulation.Aivika.Trans.DES.MonadDES m => GHC.Base.Applicative (Simulation.Aivika.Trans.Internal.Cont.Cont m)
+ Simulation.Aivika.Trans.Internal.Cont: instance Simulation.Aivika.Trans.DES.MonadDES m => GHC.Base.Functor (Simulation.Aivika.Trans.Internal.Cont.Cont m)
+ Simulation.Aivika.Trans.Internal.Cont: instance Simulation.Aivika.Trans.DES.MonadDES m => GHC.Base.Monad (Simulation.Aivika.Trans.Internal.Cont.Cont m)
+ Simulation.Aivika.Trans.Internal.Cont: instance Simulation.Aivika.Trans.DES.MonadDES m => GHC.Classes.Eq (Simulation.Aivika.Trans.Internal.Cont.ContId m)
+ Simulation.Aivika.Trans.Internal.Cont: instance Simulation.Aivika.Trans.DES.MonadDES m => Simulation.Aivika.Trans.Comp.MonadCompTrans Simulation.Aivika.Trans.Internal.Cont.Cont m
+ Simulation.Aivika.Trans.Internal.Cont: instance Simulation.Aivika.Trans.DES.MonadDES m => Simulation.Aivika.Trans.Internal.Dynamics.DynamicsLift Simulation.Aivika.Trans.Internal.Cont.Cont m
+ Simulation.Aivika.Trans.Internal.Cont: instance Simulation.Aivika.Trans.DES.MonadDES m => Simulation.Aivika.Trans.Internal.Event.EventLift Simulation.Aivika.Trans.Internal.Cont.Cont m
+ Simulation.Aivika.Trans.Internal.Cont: instance Simulation.Aivika.Trans.DES.MonadDES m => Simulation.Aivika.Trans.Internal.Parameter.ParameterLift Simulation.Aivika.Trans.Internal.Cont.Cont m
+ Simulation.Aivika.Trans.Internal.Cont: instance Simulation.Aivika.Trans.DES.MonadDES m => Simulation.Aivika.Trans.Internal.Simulation.SimulationLift Simulation.Aivika.Trans.Internal.Cont.Cont m
+ Simulation.Aivika.Trans.Internal.Cont: invokeCont :: ContParams m a -> Cont m a -> Event m ()
+ Simulation.Aivika.Trans.Internal.Cont: newContId :: MonadDES m => Simulation m (ContId m)
+ Simulation.Aivika.Trans.Internal.Cont: newtype Cont m a
+ Simulation.Aivika.Trans.Internal.Cont: reenterCont :: MonadDES m => ContParams m a -> a -> Event m ()
+ Simulation.Aivika.Trans.Internal.Cont: rerunCont :: MonadDES m => Cont m a -> ContId m -> Cont m a
+ Simulation.Aivika.Trans.Internal.Cont: resumeCont :: MonadDES m => ContParams m a -> a -> Event m ()
+ Simulation.Aivika.Trans.Internal.Cont: resumeECont :: MonadDES m => ContParams m a -> SomeException -> Event m ()
+ Simulation.Aivika.Trans.Internal.Cont: runCont :: MonadDES m => Cont m a -> (a -> Event m ()) -> (SomeException -> Event m ()) -> (() -> Event m ()) -> ContId m -> Bool -> Event m ()
+ Simulation.Aivika.Trans.Internal.Cont: spawnCont :: MonadDES m => ContCancellation -> Cont m () -> ContId m -> Cont m ()
+ Simulation.Aivika.Trans.Internal.Cont: substituteCont :: MonadDES m => ContParams m a -> (a -> Event m ()) -> ContParams m a
+ Simulation.Aivika.Trans.Internal.Cont: throwCont :: (MonadDES m, Exception e) => e -> Cont m a
+ Simulation.Aivika.Trans.Internal.Cont: traceCont :: MonadDES m => String -> Cont m a -> Cont m a
+ Simulation.Aivika.Trans.Internal.Cont: transferCont :: MonadDES m => Cont m () -> Cont m a
+ Simulation.Aivika.Trans.Internal.Cont: unfreezeCont :: FrozenCont m a -> Event m (Maybe (ContParams m a))
+ Simulation.Aivika.Trans.Internal.Dynamics: Dynamics :: (Point m -> m a) -> Dynamics m a
+ Simulation.Aivika.Trans.Internal.Dynamics: catchDynamics :: (MonadException m, Exception e) => Dynamics m a -> (e -> Dynamics m a) -> Dynamics m a
+ Simulation.Aivika.Trans.Internal.Dynamics: class DynamicsLift t m
+ Simulation.Aivika.Trans.Internal.Dynamics: finallyDynamics :: MonadException m => Dynamics m a -> Dynamics m b -> Dynamics m a
+ Simulation.Aivika.Trans.Internal.Dynamics: instance (GHC.Float.Floating a, GHC.Base.Monad m) => GHC.Float.Floating (Simulation.Aivika.Trans.Internal.Types.Dynamics m a)
+ Simulation.Aivika.Trans.Internal.Dynamics: instance (GHC.Num.Num a, GHC.Base.Monad m) => GHC.Num.Num (Simulation.Aivika.Trans.Internal.Types.Dynamics m a)
+ Simulation.Aivika.Trans.Internal.Dynamics: instance (GHC.Real.Fractional a, GHC.Base.Monad m) => GHC.Real.Fractional (Simulation.Aivika.Trans.Internal.Types.Dynamics m a)
+ Simulation.Aivika.Trans.Internal.Dynamics: instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Simulation.Aivika.Trans.Internal.Types.Dynamics m)
+ Simulation.Aivika.Trans.Internal.Dynamics: instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Simulation.Aivika.Trans.Internal.Types.Dynamics m)
+ Simulation.Aivika.Trans.Internal.Dynamics: instance Control.Monad.Trans.Class.MonadTrans Simulation.Aivika.Trans.Internal.Types.Dynamics
+ Simulation.Aivika.Trans.Internal.Dynamics: instance GHC.Base.Applicative m => GHC.Base.Applicative (Simulation.Aivika.Trans.Internal.Types.Dynamics m)
+ Simulation.Aivika.Trans.Internal.Dynamics: instance GHC.Base.Functor m => GHC.Base.Functor (Simulation.Aivika.Trans.Internal.Types.Dynamics m)
+ Simulation.Aivika.Trans.Internal.Dynamics: instance GHC.Base.Monad m => GHC.Base.Monad (Simulation.Aivika.Trans.Internal.Types.Dynamics m)
+ Simulation.Aivika.Trans.Internal.Dynamics: instance GHC.Base.Monad m => Simulation.Aivika.Trans.Comp.MonadCompTrans Simulation.Aivika.Trans.Internal.Types.Dynamics m
+ Simulation.Aivika.Trans.Internal.Dynamics: instance GHC.Base.Monad m => Simulation.Aivika.Trans.Internal.Dynamics.DynamicsLift Simulation.Aivika.Trans.Internal.Types.Dynamics m
+ Simulation.Aivika.Trans.Internal.Dynamics: instance GHC.Base.Monad m => Simulation.Aivika.Trans.Internal.Parameter.ParameterLift Simulation.Aivika.Trans.Internal.Types.Dynamics m
+ Simulation.Aivika.Trans.Internal.Dynamics: instance GHC.Base.Monad m => Simulation.Aivika.Trans.Internal.Simulation.SimulationLift Simulation.Aivika.Trans.Internal.Types.Dynamics m
+ Simulation.Aivika.Trans.Internal.Dynamics: integIteration :: Monad m => Dynamics m Int
+ Simulation.Aivika.Trans.Internal.Dynamics: integPhase :: Monad m => Dynamics m Int
+ Simulation.Aivika.Trans.Internal.Dynamics: invokeDynamics :: Point m -> Dynamics m a -> m a
+ Simulation.Aivika.Trans.Internal.Dynamics: isTimeInteg :: Monad m => Dynamics m Bool
+ Simulation.Aivika.Trans.Internal.Dynamics: liftDynamics :: DynamicsLift t m => Dynamics m a -> t m a
+ Simulation.Aivika.Trans.Internal.Dynamics: newtype Dynamics m a
+ Simulation.Aivika.Trans.Internal.Dynamics: runDynamicsInIntegTimes :: Monad m => Dynamics m a -> Simulation m [m a]
+ Simulation.Aivika.Trans.Internal.Dynamics: runDynamicsInStartTime :: Dynamics m a -> Simulation m a
+ Simulation.Aivika.Trans.Internal.Dynamics: runDynamicsInStopTime :: Dynamics m a -> Simulation m a
+ Simulation.Aivika.Trans.Internal.Dynamics: runDynamicsInTime :: Double -> Dynamics m a -> Simulation m a
+ Simulation.Aivika.Trans.Internal.Dynamics: runDynamicsInTimes :: Monad m => [Double] -> Dynamics m a -> Simulation m [m a]
+ Simulation.Aivika.Trans.Internal.Dynamics: throwDynamics :: (MonadException m, Exception e) => e -> Dynamics m a
+ Simulation.Aivika.Trans.Internal.Dynamics: time :: Monad m => Dynamics m Double
+ Simulation.Aivika.Trans.Internal.Dynamics: traceDynamics :: Monad m => String -> Dynamics m a -> Dynamics m a
+ Simulation.Aivika.Trans.Internal.Event: CurrentEvents :: EventProcessing
+ Simulation.Aivika.Trans.Internal.Event: CurrentEventsOrFromPast :: EventProcessing
+ Simulation.Aivika.Trans.Internal.Event: DisposableEvent :: Event m () -> DisposableEvent m
+ Simulation.Aivika.Trans.Internal.Event: EarlierEvents :: EventProcessing
+ Simulation.Aivika.Trans.Internal.Event: EarlierEventsOrFromPast :: EventProcessing
+ Simulation.Aivika.Trans.Internal.Event: Event :: (Point m -> m a) -> Event m a
+ Simulation.Aivika.Trans.Internal.Event: [disposeEvent] :: DisposableEvent m -> Event m ()
+ Simulation.Aivika.Trans.Internal.Event: cancelEvent :: EventCancellation m -> Event m ()
+ Simulation.Aivika.Trans.Internal.Event: catchEvent :: (MonadException m, Exception e) => Event m a -> (e -> Event m a) -> Event m a
+ Simulation.Aivika.Trans.Internal.Event: class (EventQueueing m, MonadIO (Event m)) => EventIOQueueing m
+ Simulation.Aivika.Trans.Internal.Event: class EventLift t m
+ Simulation.Aivika.Trans.Internal.Event: class EventQueueing m where data EventQueue m :: * runEvent = runEventWith CurrentEvents where {
+ Simulation.Aivika.Trans.Internal.Event: data EventCancellation m
+ Simulation.Aivika.Trans.Internal.Event: data EventProcessing
+ Simulation.Aivika.Trans.Internal.Event: data family EventQueue m :: *;
+ Simulation.Aivika.Trans.Internal.Event: enqueueEvent :: EventQueueing m => Double -> Event m () -> Event m ()
+ Simulation.Aivika.Trans.Internal.Event: enqueueEventIO :: EventIOQueueing m => Double -> Event m () -> Event m ()
+ Simulation.Aivika.Trans.Internal.Event: enqueueEventIOWithIntegTimes :: (MonadDES m, EventIOQueueing m) => Event m () -> Event m ()
+ Simulation.Aivika.Trans.Internal.Event: enqueueEventIOWithPoints :: (MonadDES m, EventIOQueueing m) => [Point m] -> Event m () -> Event m ()
+ Simulation.Aivika.Trans.Internal.Event: enqueueEventIOWithStartTime :: (MonadDES m, EventIOQueueing m) => Event m () -> Event m ()
+ Simulation.Aivika.Trans.Internal.Event: enqueueEventIOWithStopTime :: (MonadDES m, EventIOQueueing m) => Event m () -> Event m ()
+ Simulation.Aivika.Trans.Internal.Event: enqueueEventIOWithTimes :: (MonadDES m, EventIOQueueing m) => [Double] -> Event m () -> Event m ()
+ Simulation.Aivika.Trans.Internal.Event: enqueueEventWithCancellation :: MonadDES m => Double -> Event m () -> Event m (EventCancellation m)
+ Simulation.Aivika.Trans.Internal.Event: enqueueEventWithIntegTimes :: MonadDES m => Event m () -> Event m ()
+ Simulation.Aivika.Trans.Internal.Event: enqueueEventWithPoints :: MonadDES m => [Point m] -> Event m () -> Event m ()
+ Simulation.Aivika.Trans.Internal.Event: enqueueEventWithStartTime :: MonadDES m => Event m () -> Event m ()
+ Simulation.Aivika.Trans.Internal.Event: enqueueEventWithStopTime :: MonadDES m => Event m () -> Event m ()
+ Simulation.Aivika.Trans.Internal.Event: enqueueEventWithTimes :: MonadDES m => [Double] -> Event m () -> Event m ()
+ Simulation.Aivika.Trans.Internal.Event: eventCancelled :: EventCancellation m -> Event m Bool
+ Simulation.Aivika.Trans.Internal.Event: eventFinished :: EventCancellation m -> Event m Bool
+ Simulation.Aivika.Trans.Internal.Event: eventQueueCount :: EventQueueing m => Event m Int
+ Simulation.Aivika.Trans.Internal.Event: finallyEvent :: MonadException m => Event m a -> Event m b -> Event m a
+ Simulation.Aivika.Trans.Internal.Event: instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Simulation.Aivika.Trans.Internal.Types.Event m)
+ Simulation.Aivika.Trans.Internal.Event: instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Simulation.Aivika.Trans.Internal.Types.Event m)
+ Simulation.Aivika.Trans.Internal.Event: instance Control.Monad.Trans.Class.MonadTrans Simulation.Aivika.Trans.Internal.Types.Event
+ Simulation.Aivika.Trans.Internal.Event: instance GHC.Base.Applicative m => GHC.Base.Applicative (Simulation.Aivika.Trans.Internal.Types.Event m)
+ Simulation.Aivika.Trans.Internal.Event: instance GHC.Base.Functor m => GHC.Base.Functor (Simulation.Aivika.Trans.Internal.Types.Event m)
+ Simulation.Aivika.Trans.Internal.Event: instance GHC.Base.Monad m => GHC.Base.Monad (Simulation.Aivika.Trans.Internal.Types.Event m)
+ Simulation.Aivika.Trans.Internal.Event: instance GHC.Base.Monad m => GHC.Base.Monoid (Simulation.Aivika.Trans.Internal.Event.DisposableEvent m)
+ Simulation.Aivika.Trans.Internal.Event: instance GHC.Base.Monad m => Simulation.Aivika.Trans.Comp.MonadCompTrans Simulation.Aivika.Trans.Internal.Types.Event m
+ Simulation.Aivika.Trans.Internal.Event: instance GHC.Base.Monad m => Simulation.Aivika.Trans.Internal.Dynamics.DynamicsLift Simulation.Aivika.Trans.Internal.Types.Event m
+ Simulation.Aivika.Trans.Internal.Event: instance GHC.Base.Monad m => Simulation.Aivika.Trans.Internal.Event.EventLift Simulation.Aivika.Trans.Internal.Types.Event m
+ Simulation.Aivika.Trans.Internal.Event: instance GHC.Base.Monad m => Simulation.Aivika.Trans.Internal.Parameter.ParameterLift Simulation.Aivika.Trans.Internal.Types.Event m
+ Simulation.Aivika.Trans.Internal.Event: instance GHC.Base.Monad m => Simulation.Aivika.Trans.Internal.Simulation.SimulationLift Simulation.Aivika.Trans.Internal.Types.Event m
+ Simulation.Aivika.Trans.Internal.Event: invokeEvent :: Point m -> Event m a -> m a
+ Simulation.Aivika.Trans.Internal.Event: liftEvent :: EventLift t m => Event m a -> t m a
+ Simulation.Aivika.Trans.Internal.Event: memoEvent :: MonadDES m => Event m a -> Simulation m (Event m a)
+ Simulation.Aivika.Trans.Internal.Event: memoEventInTime :: MonadDES m => Event m a -> Simulation m (Event m a)
+ Simulation.Aivika.Trans.Internal.Event: newEventQueue :: EventQueueing m => Specs m -> m (EventQueue m)
+ Simulation.Aivika.Trans.Internal.Event: newtype DisposableEvent m
+ Simulation.Aivika.Trans.Internal.Event: newtype Event m a
+ Simulation.Aivika.Trans.Internal.Event: retryEvent :: MonadException m => String -> Event m a
+ Simulation.Aivika.Trans.Internal.Event: runEvent :: EventQueueing m => Event m a -> Dynamics m a
+ Simulation.Aivika.Trans.Internal.Event: runEventInStartTime :: MonadDES m => Event m a -> Simulation m a
+ Simulation.Aivika.Trans.Internal.Event: runEventInStopTime :: MonadDES m => Event m a -> Simulation m a
+ Simulation.Aivika.Trans.Internal.Event: runEventWith :: EventQueueing m => EventProcessing -> Event m a -> Dynamics m a
+ Simulation.Aivika.Trans.Internal.Event: throwEvent :: (MonadException m, Exception e) => e -> Event m a
+ Simulation.Aivika.Trans.Internal.Event: traceEvent :: MonadDES m => String -> Event m a -> Event m a
+ Simulation.Aivika.Trans.Internal.Event: yieldEvent :: MonadDES m => Event m () -> Event m ()
+ Simulation.Aivika.Trans.Internal.Event: }
+ Simulation.Aivika.Trans.Internal.Parameter: Parameter :: (Run m -> m a) -> Parameter m a
+ Simulation.Aivika.Trans.Internal.Parameter: catchParameter :: (MonadException m, Exception e) => Parameter m a -> (e -> Parameter m a) -> Parameter m a
+ Simulation.Aivika.Trans.Internal.Parameter: class ParameterLift t m
+ Simulation.Aivika.Trans.Internal.Parameter: dt :: Monad m => Parameter m Double
+ Simulation.Aivika.Trans.Internal.Parameter: finallyParameter :: MonadException m => Parameter m a -> Parameter m b -> Parameter m a
+ Simulation.Aivika.Trans.Internal.Parameter: generatorParameter :: Monad m => Parameter m (Generator m)
+ Simulation.Aivika.Trans.Internal.Parameter: instance (GHC.Float.Floating a, GHC.Base.Monad m) => GHC.Float.Floating (Simulation.Aivika.Trans.Internal.Types.Parameter m a)
+ Simulation.Aivika.Trans.Internal.Parameter: instance (GHC.Num.Num a, GHC.Base.Monad m) => GHC.Num.Num (Simulation.Aivika.Trans.Internal.Types.Parameter m a)
+ Simulation.Aivika.Trans.Internal.Parameter: instance (GHC.Real.Fractional a, GHC.Base.Monad m) => GHC.Real.Fractional (Simulation.Aivika.Trans.Internal.Types.Parameter m a)
+ Simulation.Aivika.Trans.Internal.Parameter: instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Simulation.Aivika.Trans.Internal.Types.Parameter m)
+ Simulation.Aivika.Trans.Internal.Parameter: instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Simulation.Aivika.Trans.Internal.Types.Parameter m)
+ Simulation.Aivika.Trans.Internal.Parameter: instance Control.Monad.Trans.Class.MonadTrans Simulation.Aivika.Trans.Internal.Types.Parameter
+ Simulation.Aivika.Trans.Internal.Parameter: instance GHC.Base.Applicative m => GHC.Base.Applicative (Simulation.Aivika.Trans.Internal.Types.Parameter m)
+ Simulation.Aivika.Trans.Internal.Parameter: instance GHC.Base.Functor m => GHC.Base.Functor (Simulation.Aivika.Trans.Internal.Types.Parameter m)
+ Simulation.Aivika.Trans.Internal.Parameter: instance GHC.Base.Monad m => GHC.Base.Monad (Simulation.Aivika.Trans.Internal.Types.Parameter m)
+ Simulation.Aivika.Trans.Internal.Parameter: instance GHC.Base.Monad m => Simulation.Aivika.Trans.Comp.MonadCompTrans Simulation.Aivika.Trans.Internal.Types.Parameter m
+ Simulation.Aivika.Trans.Internal.Parameter: instance GHC.Base.Monad m => Simulation.Aivika.Trans.Internal.Parameter.ParameterLift Simulation.Aivika.Trans.Internal.Types.Parameter m
+ Simulation.Aivika.Trans.Internal.Parameter: invokeParameter :: Run m -> Parameter m a -> m a
+ Simulation.Aivika.Trans.Internal.Parameter: liftParameter :: ParameterLift t m => Parameter m a -> t m a
+ Simulation.Aivika.Trans.Internal.Parameter: memoParameter :: (MonadComp m, MonadIO m) => Parameter m a -> m (Parameter m a)
+ Simulation.Aivika.Trans.Internal.Parameter: newtype Parameter m a
+ Simulation.Aivika.Trans.Internal.Parameter: runParameter :: MonadDES m => Parameter m a -> Specs m -> m a
+ Simulation.Aivika.Trans.Internal.Parameter: runParameters :: MonadDES m => Parameter m a -> Specs m -> Int -> [m a]
+ Simulation.Aivika.Trans.Internal.Parameter: simulationCount :: Monad m => Parameter m Int
+ Simulation.Aivika.Trans.Internal.Parameter: simulationEventQueue :: Monad m => Parameter m (EventQueue m)
+ Simulation.Aivika.Trans.Internal.Parameter: simulationIndex :: Monad m => Parameter m Int
+ Simulation.Aivika.Trans.Internal.Parameter: simulationSpecs :: Monad m => Parameter m (Specs m)
+ Simulation.Aivika.Trans.Internal.Parameter: starttime :: Monad m => Parameter m Double
+ Simulation.Aivika.Trans.Internal.Parameter: stoptime :: Monad m => Parameter m Double
+ Simulation.Aivika.Trans.Internal.Parameter: tableParameter :: Monad m => Array Int a -> Parameter m a
+ Simulation.Aivika.Trans.Internal.Parameter: throwParameter :: (MonadException m, Exception e) => e -> Parameter m a
+ Simulation.Aivika.Trans.Internal.Process: Process :: (ProcessId m -> Cont m a) -> Process m a
+ Simulation.Aivika.Trans.Internal.Process: cancelProcess :: MonadDES m => Process m a
+ Simulation.Aivika.Trans.Internal.Process: cancelProcessWithId :: MonadDES m => ProcessId m -> Event m ()
+ Simulation.Aivika.Trans.Internal.Process: catchProcess :: (MonadDES m, Exception e) => Process m a -> (e -> Process m a) -> Process m a
+ Simulation.Aivika.Trans.Internal.Process: class ProcessLift t m
+ Simulation.Aivika.Trans.Internal.Process: data ProcessId m
+ Simulation.Aivika.Trans.Internal.Process: enqueueProcess :: MonadDES m => Double -> Process m () -> Event m ()
+ Simulation.Aivika.Trans.Internal.Process: enqueueProcessUsingId :: MonadDES m => Double -> ProcessId m -> Process m () -> Event m ()
+ Simulation.Aivika.Trans.Internal.Process: finallyProcess :: MonadDES m => Process m a -> Process m b -> Process m a
+ Simulation.Aivika.Trans.Internal.Process: holdProcess :: MonadDES m => Double -> Process m ()
+ Simulation.Aivika.Trans.Internal.Process: instance (Simulation.Aivika.Trans.DES.MonadDES m, Control.Monad.IO.Class.MonadIO m) => Control.Monad.IO.Class.MonadIO (Simulation.Aivika.Trans.Internal.Process.Process m)
+ Simulation.Aivika.Trans.Internal.Process: instance Simulation.Aivika.Trans.DES.MonadDES m => GHC.Base.Applicative (Simulation.Aivika.Trans.Internal.Process.Process m)
+ Simulation.Aivika.Trans.Internal.Process: instance Simulation.Aivika.Trans.DES.MonadDES m => GHC.Base.Functor (Simulation.Aivika.Trans.Internal.Process.Process m)
+ Simulation.Aivika.Trans.Internal.Process: instance Simulation.Aivika.Trans.DES.MonadDES m => GHC.Base.Monad (Simulation.Aivika.Trans.Internal.Process.Process m)
+ Simulation.Aivika.Trans.Internal.Process: instance Simulation.Aivika.Trans.DES.MonadDES m => GHC.Classes.Eq (Simulation.Aivika.Trans.Internal.Process.ProcessId m)
+ Simulation.Aivika.Trans.Internal.Process: instance Simulation.Aivika.Trans.DES.MonadDES m => Simulation.Aivika.Trans.Comp.MonadCompTrans Simulation.Aivika.Trans.Internal.Process.Process m
+ Simulation.Aivika.Trans.Internal.Process: instance Simulation.Aivika.Trans.DES.MonadDES m => Simulation.Aivika.Trans.Internal.Dynamics.DynamicsLift Simulation.Aivika.Trans.Internal.Process.Process m
+ Simulation.Aivika.Trans.Internal.Process: instance Simulation.Aivika.Trans.DES.MonadDES m => Simulation.Aivika.Trans.Internal.Event.EventLift Simulation.Aivika.Trans.Internal.Process.Process m
+ Simulation.Aivika.Trans.Internal.Process: instance Simulation.Aivika.Trans.DES.MonadDES m => Simulation.Aivika.Trans.Internal.Parameter.ParameterLift Simulation.Aivika.Trans.Internal.Process.Process m
+ Simulation.Aivika.Trans.Internal.Process: instance Simulation.Aivika.Trans.DES.MonadDES m => Simulation.Aivika.Trans.Internal.Process.ProcessLift Simulation.Aivika.Trans.Internal.Process.Process m
+ Simulation.Aivika.Trans.Internal.Process: instance Simulation.Aivika.Trans.DES.MonadDES m => Simulation.Aivika.Trans.Internal.Simulation.SimulationLift Simulation.Aivika.Trans.Internal.Process.Process m
+ Simulation.Aivika.Trans.Internal.Process: interruptProcess :: MonadDES m => ProcessId m -> Event m ()
+ Simulation.Aivika.Trans.Internal.Process: invokeProcess :: ProcessId m -> Process m a -> Cont m a
+ Simulation.Aivika.Trans.Internal.Process: liftProcess :: ProcessLift t m => Process m a -> t m a
+ Simulation.Aivika.Trans.Internal.Process: memoProcess :: MonadDES m => Process m a -> Simulation m (Process m a)
+ Simulation.Aivika.Trans.Internal.Process: neverProcess :: MonadDES m => Process m a
+ Simulation.Aivika.Trans.Internal.Process: newProcessId :: MonadDES m => Simulation m (ProcessId m)
+ Simulation.Aivika.Trans.Internal.Process: newtype Process m a
+ Simulation.Aivika.Trans.Internal.Process: passivateProcess :: MonadDES m => Process m ()
+ Simulation.Aivika.Trans.Internal.Process: passivateProcessBefore :: MonadDES m => Event m () -> Process m ()
+ Simulation.Aivika.Trans.Internal.Process: processAwait :: MonadDES m => Signal m a -> Process m a
+ Simulation.Aivika.Trans.Internal.Process: processCancelled :: MonadDES m => ProcessId m -> Event m Bool
+ Simulation.Aivika.Trans.Internal.Process: processCancelling :: MonadDES m => ProcessId m -> Signal m ()
+ Simulation.Aivika.Trans.Internal.Process: processId :: MonadDES m => Process m (ProcessId m)
+ Simulation.Aivika.Trans.Internal.Process: processInterrupted :: MonadDES m => ProcessId m -> Event m Bool
+ Simulation.Aivika.Trans.Internal.Process: processInterruptionTime :: MonadDES m => ProcessId m -> Event m (Maybe Double)
+ Simulation.Aivika.Trans.Internal.Process: processParallel :: MonadDES m => [Process m a] -> Process m [a]
+ Simulation.Aivika.Trans.Internal.Process: processParallelUsingIds :: MonadDES m => [(ProcessId m, Process m a)] -> Process m [a]
+ Simulation.Aivika.Trans.Internal.Process: processParallelUsingIds_ :: MonadDES m => [(ProcessId m, Process m a)] -> Process m ()
+ Simulation.Aivika.Trans.Internal.Process: processParallel_ :: MonadDES m => [Process m a] -> Process m ()
+ Simulation.Aivika.Trans.Internal.Process: processPassive :: MonadDES m => ProcessId m -> Event m Bool
+ Simulation.Aivika.Trans.Internal.Process: processPreemptionBegin :: MonadDES m => ProcessId m -> Event m ()
+ Simulation.Aivika.Trans.Internal.Process: processPreemptionBeginning :: MonadDES m => ProcessId m -> Signal m ()
+ Simulation.Aivika.Trans.Internal.Process: processPreemptionEnd :: MonadDES m => ProcessId m -> Event m ()
+ Simulation.Aivika.Trans.Internal.Process: processPreemptionEnding :: MonadDES m => ProcessId m -> Signal m ()
+ Simulation.Aivika.Trans.Internal.Process: processUsingId :: MonadDES m => ProcessId m -> Process m a -> Process m a
+ Simulation.Aivika.Trans.Internal.Process: processYield :: MonadDES m => Process m ()
+ Simulation.Aivika.Trans.Internal.Process: reactivateProcess :: MonadDES m => ProcessId m -> Event m ()
+ Simulation.Aivika.Trans.Internal.Process: reactivateProcessImmediately :: MonadDES m => ProcessId m -> Event m ()
+ Simulation.Aivika.Trans.Internal.Process: retryProcess :: MonadDES m => String -> Process m a
+ Simulation.Aivika.Trans.Internal.Process: runProcess :: MonadDES m => Process m () -> Event m ()
+ Simulation.Aivika.Trans.Internal.Process: runProcessInStartTime :: MonadDES m => Process m () -> Simulation m ()
+ Simulation.Aivika.Trans.Internal.Process: runProcessInStartTimeUsingId :: MonadDES m => ProcessId m -> Process m () -> Simulation m ()
+ Simulation.Aivika.Trans.Internal.Process: runProcessInStopTime :: MonadDES m => Process m () -> Simulation m ()
+ Simulation.Aivika.Trans.Internal.Process: runProcessInStopTimeUsingId :: MonadDES m => ProcessId m -> Process m () -> Simulation m ()
+ Simulation.Aivika.Trans.Internal.Process: runProcessUsingId :: MonadDES m => ProcessId m -> Process m () -> Event m ()
+ Simulation.Aivika.Trans.Internal.Process: spawnProcess :: MonadDES m => Process m () -> Process m ()
+ Simulation.Aivika.Trans.Internal.Process: spawnProcessUsingId :: MonadDES m => ProcessId m -> Process m () -> Process m ()
+ Simulation.Aivika.Trans.Internal.Process: spawnProcessUsingIdWith :: MonadDES m => ContCancellation -> ProcessId m -> Process m () -> Process m ()
+ Simulation.Aivika.Trans.Internal.Process: spawnProcessWith :: MonadDES m => ContCancellation -> Process m () -> Process m ()
+ Simulation.Aivika.Trans.Internal.Process: throwProcess :: (MonadDES m, Exception e) => e -> Process m a
+ Simulation.Aivika.Trans.Internal.Process: timeoutProcess :: MonadDES m => Double -> Process m a -> Process m (Maybe a)
+ Simulation.Aivika.Trans.Internal.Process: timeoutProcessUsingId :: MonadDES m => Double -> ProcessId m -> Process m a -> Process m (Maybe a)
+ Simulation.Aivika.Trans.Internal.Process: traceProcess :: MonadDES m => String -> Process m a -> Process m a
+ Simulation.Aivika.Trans.Internal.Process: transferProcess :: MonadDES m => Process m () -> Process m a
+ Simulation.Aivika.Trans.Internal.Process: unzipProcess :: MonadDES m => Process m (a, b) -> Simulation m (Process m a, Process m b)
+ Simulation.Aivika.Trans.Internal.Process: whenCancellingProcess :: MonadDES m => Event m () -> Process m ()
+ Simulation.Aivika.Trans.Internal.Process: zip3ProcessParallel :: MonadDES m => Process m a -> Process m b -> Process m c -> Process m (a, b, c)
+ Simulation.Aivika.Trans.Internal.Process: zipProcessParallel :: MonadDES m => Process m a -> Process m b -> Process m (a, b)
+ Simulation.Aivika.Trans.Internal.Simulation: Simulation :: (Run m -> m a) -> Simulation m a
+ Simulation.Aivika.Trans.Internal.Simulation: SimulationAbort :: String -> SimulationAbort
+ Simulation.Aivika.Trans.Internal.Simulation: SimulationRetry :: String -> SimulationRetry
+ Simulation.Aivika.Trans.Internal.Simulation: [SimulationException] :: SimulationException
+ Simulation.Aivika.Trans.Internal.Simulation: catchSimulation :: (MonadException m, Exception e) => Simulation m a -> (e -> Simulation m a) -> Simulation m a
+ Simulation.Aivika.Trans.Internal.Simulation: class SimulationLift t m
+ Simulation.Aivika.Trans.Internal.Simulation: data SimulationAbort :: *
+ Simulation.Aivika.Trans.Internal.Simulation: data SimulationException :: *
+ Simulation.Aivika.Trans.Internal.Simulation: data SimulationRetry :: *
+ Simulation.Aivika.Trans.Internal.Simulation: finallySimulation :: MonadException m => Simulation m a -> Simulation m b -> Simulation m a
+ Simulation.Aivika.Trans.Internal.Simulation: instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Simulation.Aivika.Trans.Internal.Types.Simulation m)
+ Simulation.Aivika.Trans.Internal.Simulation: instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Simulation.Aivika.Trans.Internal.Types.Simulation m)
+ Simulation.Aivika.Trans.Internal.Simulation: instance Control.Monad.Trans.Class.MonadTrans Simulation.Aivika.Trans.Internal.Types.Simulation
+ Simulation.Aivika.Trans.Internal.Simulation: instance GHC.Base.Applicative m => GHC.Base.Applicative (Simulation.Aivika.Trans.Internal.Types.Simulation m)
+ Simulation.Aivika.Trans.Internal.Simulation: instance GHC.Base.Functor m => GHC.Base.Functor (Simulation.Aivika.Trans.Internal.Types.Simulation m)
+ Simulation.Aivika.Trans.Internal.Simulation: instance GHC.Base.Monad m => GHC.Base.Monad (Simulation.Aivika.Trans.Internal.Types.Simulation m)
+ Simulation.Aivika.Trans.Internal.Simulation: instance GHC.Base.Monad m => Simulation.Aivika.Trans.Comp.MonadCompTrans Simulation.Aivika.Trans.Internal.Types.Simulation m
+ Simulation.Aivika.Trans.Internal.Simulation: instance GHC.Base.Monad m => Simulation.Aivika.Trans.Internal.Parameter.ParameterLift Simulation.Aivika.Trans.Internal.Types.Simulation m
+ Simulation.Aivika.Trans.Internal.Simulation: instance GHC.Base.Monad m => Simulation.Aivika.Trans.Internal.Simulation.SimulationLift Simulation.Aivika.Trans.Internal.Types.Simulation m
+ Simulation.Aivika.Trans.Internal.Simulation: invokeSimulation :: Run m -> Simulation m a -> m a
+ Simulation.Aivika.Trans.Internal.Simulation: liftSimulation :: SimulationLift t m => Simulation m a -> t m a
+ Simulation.Aivika.Trans.Internal.Simulation: newtype Simulation m a
+ Simulation.Aivika.Trans.Internal.Simulation: runSimulation :: MonadDES m => Simulation m a -> Specs m -> m a
+ Simulation.Aivika.Trans.Internal.Simulation: runSimulationByIndex :: MonadDES m => Simulation m a -> Specs m -> Int -> Int -> m a
+ Simulation.Aivika.Trans.Internal.Simulation: runSimulations :: MonadDES m => Simulation m a -> Specs m -> Int -> [m a]
+ Simulation.Aivika.Trans.Internal.Simulation: throwSimulation :: (MonadException m, Exception e) => e -> Simulation m a
+ Simulation.Aivika.Trans.Internal.Specs: Euler :: Method
+ Simulation.Aivika.Trans.Internal.Specs: Point :: Specs m -> Run m -> Double -> Int -> Int -> Point m
+ Simulation.Aivika.Trans.Internal.Specs: Run :: Specs m -> Int -> Int -> EventQueue m -> Generator m -> Run m
+ Simulation.Aivika.Trans.Internal.Specs: RungeKutta2 :: Method
+ Simulation.Aivika.Trans.Internal.Specs: RungeKutta4 :: Method
+ Simulation.Aivika.Trans.Internal.Specs: Specs :: Double -> Double -> Double -> Method -> GeneratorType m -> Specs m
+ Simulation.Aivika.Trans.Internal.Specs: [pointIteration] :: Point m -> Int
+ Simulation.Aivika.Trans.Internal.Specs: [pointPhase] :: Point m -> Int
+ Simulation.Aivika.Trans.Internal.Specs: [pointRun] :: Point m -> Run m
+ Simulation.Aivika.Trans.Internal.Specs: [pointSpecs] :: Point m -> Specs m
+ Simulation.Aivika.Trans.Internal.Specs: [pointTime] :: Point m -> Double
+ Simulation.Aivika.Trans.Internal.Specs: [runCount] :: Run m -> Int
+ Simulation.Aivika.Trans.Internal.Specs: [runEventQueue] :: Run m -> EventQueue m
+ Simulation.Aivika.Trans.Internal.Specs: [runGenerator] :: Run m -> Generator m
+ Simulation.Aivika.Trans.Internal.Specs: [runIndex] :: Run m -> Int
+ Simulation.Aivika.Trans.Internal.Specs: [runSpecs] :: Run m -> Specs m
+ Simulation.Aivika.Trans.Internal.Specs: [spcDT] :: Specs m -> Double
+ Simulation.Aivika.Trans.Internal.Specs: [spcGeneratorType] :: Specs m -> GeneratorType m
+ Simulation.Aivika.Trans.Internal.Specs: [spcMethod] :: Specs m -> Method
+ Simulation.Aivika.Trans.Internal.Specs: [spcStartTime] :: Specs m -> Double
+ Simulation.Aivika.Trans.Internal.Specs: [spcStopTime] :: Specs m -> Double
+ Simulation.Aivika.Trans.Internal.Specs: basicTime :: Specs m -> Int -> Int -> Double
+ Simulation.Aivika.Trans.Internal.Specs: data Method
+ Simulation.Aivika.Trans.Internal.Specs: data Point m
+ Simulation.Aivika.Trans.Internal.Specs: data Run m
+ Simulation.Aivika.Trans.Internal.Specs: data Specs m
+ Simulation.Aivika.Trans.Internal.Specs: integIterationBnds :: Specs m -> (Int, Int)
+ Simulation.Aivika.Trans.Internal.Specs: integIterationHiBnd :: Specs m -> Int
+ Simulation.Aivika.Trans.Internal.Specs: integIterationLoBnd :: Specs m -> Int
+ Simulation.Aivika.Trans.Internal.Specs: integPhaseBnds :: Specs m -> (Int, Int)
+ Simulation.Aivika.Trans.Internal.Specs: integPhaseHiBnd :: Specs m -> Int
+ Simulation.Aivika.Trans.Internal.Specs: integPhaseLoBnd :: Specs m -> Int
+ Simulation.Aivika.Trans.Internal.Specs: integPoints :: Run m -> [Point m]
+ Simulation.Aivika.Trans.Internal.Specs: integPointsStartingFrom :: Point m -> [Point m]
+ Simulation.Aivika.Trans.Internal.Specs: integStartPoint :: Run m -> Point m
+ Simulation.Aivika.Trans.Internal.Specs: integStopPoint :: Run m -> Point m
+ Simulation.Aivika.Trans.Internal.Specs: integTimes :: Specs m -> [Double]
+ Simulation.Aivika.Trans.Internal.Specs: pointAt :: Run m -> Double -> Point m
+ Simulation.Aivika.Trans.Operation: resetOperation :: MonadDES m => Operation m a b -> Event m ()
+ Simulation.Aivika.Trans.Process: passivateProcessBefore :: MonadDES m => Event m () -> Process m ()
+ Simulation.Aivika.Trans.Process: processInterruptionTime :: MonadDES m => ProcessId m -> Event m (Maybe Double)
+ Simulation.Aivika.Trans.Process: reactivateProcessImmediately :: MonadDES m => ProcessId m -> Event m ()
+ Simulation.Aivika.Trans.Process: transferProcess :: MonadDES m => Process m () -> Process m a
+ Simulation.Aivika.Trans.Queue: resetQueue :: MonadDES m => Queue m si sm so a -> Event m ()
+ Simulation.Aivika.Trans.Queue.Infinite: resetQueue :: MonadDES m => Queue m sm so a -> Event m ()
+ Simulation.Aivika.Trans.Ref: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Observable.Observable (Simulation.Aivika.Trans.Ref.Base.Strict.Ref m) (t m)) => Simulation.Aivika.Trans.Observable.Observable (Simulation.Aivika.Trans.Ref.Ref m) (t m)
+ Simulation.Aivika.Trans.Ref.Base.Lazy: class Monad m => MonadRef m where data Ref m a where {
+ Simulation.Aivika.Trans.Ref.Base.Lazy: class MonadRef m => MonadRef0 m
+ Simulation.Aivika.Trans.Ref.Base.Lazy: data family Ref m a;
+ Simulation.Aivika.Trans.Ref.Base.Lazy: equalRef :: MonadRef m => Ref m a -> Ref m a -> Bool
+ Simulation.Aivika.Trans.Ref.Base.Lazy: instance (GHC.Base.Monad m, Simulation.Aivika.Trans.Ref.Base.Lazy.MonadRef m) => Simulation.Aivika.Trans.Observable.Observable (Simulation.Aivika.Trans.Ref.Base.Lazy.Ref m) (Simulation.Aivika.Trans.Internal.Types.Event m)
+ Simulation.Aivika.Trans.Ref.Base.Lazy: instance Simulation.Aivika.Trans.Ref.Base.Lazy.MonadRef m => GHC.Classes.Eq (Simulation.Aivika.Trans.Ref.Base.Lazy.Ref m a)
+ Simulation.Aivika.Trans.Ref.Base.Lazy: modifyRef :: MonadRef m => Ref m a -> (a -> a) -> Event m ()
+ Simulation.Aivika.Trans.Ref.Base.Lazy: newRef :: MonadRef m => a -> Simulation m (Ref m a)
+ Simulation.Aivika.Trans.Ref.Base.Lazy: newRef0 :: MonadRef0 m => a -> m (Ref m a)
+ Simulation.Aivika.Trans.Ref.Base.Lazy: readRef :: MonadRef m => Ref m a -> Event m a
+ Simulation.Aivika.Trans.Ref.Base.Lazy: writeRef :: MonadRef m => Ref m a -> a -> Event m ()
+ Simulation.Aivika.Trans.Ref.Base.Lazy: }
+ Simulation.Aivika.Trans.Ref.Base.Strict: class Monad m => MonadRef m where data Ref m a where {
+ Simulation.Aivika.Trans.Ref.Base.Strict: class MonadRef m => MonadRef0 m
+ Simulation.Aivika.Trans.Ref.Base.Strict: data family Ref m a;
+ Simulation.Aivika.Trans.Ref.Base.Strict: equalRef :: MonadRef m => Ref m a -> Ref m a -> Bool
+ Simulation.Aivika.Trans.Ref.Base.Strict: instance (GHC.Base.Monad m, Simulation.Aivika.Trans.Ref.Base.Strict.MonadRef m) => Simulation.Aivika.Trans.Observable.Observable (Simulation.Aivika.Trans.Ref.Base.Strict.Ref m) (Simulation.Aivika.Trans.Internal.Types.Event m)
+ Simulation.Aivika.Trans.Ref.Base.Strict: instance Simulation.Aivika.Trans.Ref.Base.Strict.MonadRef m => GHC.Classes.Eq (Simulation.Aivika.Trans.Ref.Base.Strict.Ref m a)
+ Simulation.Aivika.Trans.Ref.Base.Strict: modifyRef :: MonadRef m => Ref m a -> (a -> a) -> Event m ()
+ Simulation.Aivika.Trans.Ref.Base.Strict: newRef :: MonadRef m => a -> Simulation m (Ref m a)
+ Simulation.Aivika.Trans.Ref.Base.Strict: newRef0 :: MonadRef0 m => a -> m (Ref m a)
+ Simulation.Aivika.Trans.Ref.Base.Strict: readRef :: MonadRef m => Ref m a -> Event m a
+ Simulation.Aivika.Trans.Ref.Base.Strict: writeRef :: MonadRef m => Ref m a -> a -> Event m ()
+ Simulation.Aivika.Trans.Ref.Base.Strict: }
+ Simulation.Aivika.Trans.Resource: resetResource :: MonadDES m => Resource m s -> Event m ()
+ Simulation.Aivika.Trans.Resource.Preemption: resetResource :: MonadResource m => Resource m -> Event m ()
+ Simulation.Aivika.Trans.Results: instance (GHC.Arr.Ix i, GHC.Show.Show i, Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue [e])) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Dynamics m (GHC.Arr.Array i e)) m
+ Simulation.Aivika.Trans.Results: instance (GHC.Arr.Ix i, GHC.Show.Show i, Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue [e])) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Event m (GHC.Arr.Array i e)) m
+ Simulation.Aivika.Trans.Results: instance (GHC.Arr.Ix i, GHC.Show.Show i, Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue [e])) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Parameter m (GHC.Arr.Array i e)) m
+ Simulation.Aivika.Trans.Results: instance (GHC.Arr.Ix i, GHC.Show.Show i, Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue [e])) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Simulation m (GHC.Arr.Array i e)) m
+ Simulation.Aivika.Trans.Results: instance (GHC.Arr.Ix i, GHC.Show.Show i, Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue [e])) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Ref.Base.Strict.Ref m (GHC.Arr.Array i e)) m
+ Simulation.Aivika.Trans.Results: instance (GHC.Arr.Ix i, GHC.Show.Show i, Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue [e])) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Ref.Ref m (GHC.Arr.Array i e)) m
+ Simulation.Aivika.Trans.Results: instance (GHC.Arr.Ix i, GHC.Show.Show i, Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue [e])) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Signal.Signalable m (GHC.Arr.Array i e)) m
+ Simulation.Aivika.Trans.Results: instance (GHC.Arr.Ix i, GHC.Show.Show i, Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Var.MonadVar m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue [e])) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Var.Var m (GHC.Arr.Array i e)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue [e])) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Dynamics m (Data.Vector.Vector e)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue [e])) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Event m (Data.Vector.Vector e)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue [e])) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Parameter m (Data.Vector.Vector e)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue [e])) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Simulation m (Data.Vector.Vector e)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue [e])) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Ref.Base.Strict.Ref m (Data.Vector.Vector e)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue [e])) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Ref.Ref m (Data.Vector.Vector e)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue [e])) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Signal.Signalable m (Data.Vector.Vector e)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a)) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Dynamics m a) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a)) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Event m a) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a)) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Parameter m a) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a)) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Simulation m a) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a)) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Ref.Base.Strict.Ref m a) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a)) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Ref.Ref m a) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a)) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Signal.Signalable m a) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a), Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue (Simulation.Aivika.Statistics.SamplingStats a))) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Dynamics m (Simulation.Aivika.Statistics.SamplingCounter a)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a), Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue (Simulation.Aivika.Statistics.SamplingStats a))) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Event m (Simulation.Aivika.Statistics.SamplingCounter a)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a), Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue (Simulation.Aivika.Statistics.SamplingStats a))) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Parameter m (Simulation.Aivika.Statistics.SamplingCounter a)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a), Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue (Simulation.Aivika.Statistics.SamplingStats a))) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Simulation m (Simulation.Aivika.Statistics.SamplingCounter a)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a), Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue (Simulation.Aivika.Statistics.SamplingStats a))) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Ref.Base.Strict.Ref m (Simulation.Aivika.Statistics.SamplingCounter a)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a), Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue (Simulation.Aivika.Statistics.SamplingStats a))) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Ref.Ref m (Simulation.Aivika.Statistics.SamplingCounter a)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a), Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue (Simulation.Aivika.Statistics.SamplingStats a))) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Signal.Signalable m (Simulation.Aivika.Statistics.SamplingCounter a)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a), Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue (Simulation.Aivika.Statistics.TimingStats a))) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Dynamics m (Simulation.Aivika.Statistics.TimingCounter a)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a), Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue (Simulation.Aivika.Statistics.TimingStats a))) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Event m (Simulation.Aivika.Statistics.TimingCounter a)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a), Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue (Simulation.Aivika.Statistics.TimingStats a))) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Parameter m (Simulation.Aivika.Statistics.TimingCounter a)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a), Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue (Simulation.Aivika.Statistics.TimingStats a))) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Internal.Types.Simulation m (Simulation.Aivika.Statistics.TimingCounter a)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a), Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue (Simulation.Aivika.Statistics.TimingStats a))) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Ref.Base.Strict.Ref m (Simulation.Aivika.Statistics.TimingCounter a)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a), Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue (Simulation.Aivika.Statistics.TimingStats a))) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Ref.Ref m (Simulation.Aivika.Statistics.TimingCounter a)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a), Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue (Simulation.Aivika.Statistics.TimingStats a))) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Signal.Signalable m (Simulation.Aivika.Statistics.TimingCounter a)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Var.MonadVar m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue [e])) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Var.Var m (Data.Vector.Vector e)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Var.MonadVar m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a)) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Var.Var m a) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Var.MonadVar m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a), Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue (Simulation.Aivika.Statistics.SamplingStats a))) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Var.Var m (Simulation.Aivika.Statistics.SamplingCounter a)) m
+ Simulation.Aivika.Trans.Results: instance (Simulation.Aivika.Trans.DES.MonadDES m, Simulation.Aivika.Trans.Var.MonadVar m, Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue a), Simulation.Aivika.Trans.Results.ResultItemable (Simulation.Aivika.Trans.Results.ResultValue (Simulation.Aivika.Statistics.TimingStats a))) => Simulation.Aivika.Trans.Results.ResultProvider (Simulation.Aivika.Trans.Var.Var m (Simulation.Aivika.Statistics.TimingCounter a)) m
+ Simulation.Aivika.Trans.Results: instance Simulation.Aivika.Trans.DES.MonadDES m => Simulation.Aivika.Trans.Results.ResultComputing Simulation.Aivika.Trans.Ref.Base.Strict.Ref m
+ Simulation.Aivika.Trans.Results.Transform: Activity :: (ResultTransform m) -> Activity m
+ Simulation.Aivika.Trans.Results.Transform: ArrivalTimer :: (ResultTransform m) -> ArrivalTimer m
+ Simulation.Aivika.Trans.Results.Transform: Operation :: (ResultTransform m) -> Operation m
+ Simulation.Aivika.Trans.Results.Transform: Queue :: (ResultTransform m) -> Queue m
+ Simulation.Aivika.Trans.Results.Transform: Resource :: (ResultTransform m) -> Resource m
+ Simulation.Aivika.Trans.Results.Transform: SamplingCounter :: (ResultTransform m) -> SamplingCounter m
+ Simulation.Aivika.Trans.Results.Transform: SamplingStats :: (ResultTransform m) -> SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: Server :: (ResultTransform m) -> Server m
+ Simulation.Aivika.Trans.Results.Transform: TimingCounter :: (ResultTransform m) -> TimingCounter m
+ Simulation.Aivika.Trans.Results.Transform: TimingStats :: (ResultTransform m) -> TimingStats m
+ Simulation.Aivika.Trans.Results.Transform: activityIdleFactor :: Activity m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: activityIdleTime :: Activity m -> SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: activityInitState :: Activity m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: activityPreemptionFactor :: Activity m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: activityPreemptionTime :: Activity m -> SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: activityState :: Activity m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: activityTotalIdleTime :: Activity m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: activityTotalPreemptionTime :: Activity m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: activityTotalUtilisationTime :: Activity m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: activityUtilisationFactor :: Activity m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: activityUtilisationTime :: Activity m -> SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: arrivalProcessingTime :: ArrivalTimer m -> SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: class ResultTransformer t m
+ Simulation.Aivika.Trans.Results.Transform: dequeueCount :: Queue m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: dequeueExtractCount :: Queue m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: dequeueExtractRate :: Queue m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: dequeueRate :: Queue m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: dequeueStrategy :: Queue m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: dequeueWaitTime :: Queue m -> SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: enqueueCount :: Queue m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: enqueueLostCount :: Queue m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: enqueueRate :: Queue m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: enqueueStoreCount :: Queue m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: enqueueStoreRate :: Queue m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: enqueueStoringStrategy :: Queue m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: enqueueStrategy :: Queue m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: enqueueWaitTime :: Queue m -> SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: instance Simulation.Aivika.Trans.Results.Transform.ResultTransformer Simulation.Aivika.Trans.Results.Transform.Activity m
+ Simulation.Aivika.Trans.Results.Transform: instance Simulation.Aivika.Trans.Results.Transform.ResultTransformer Simulation.Aivika.Trans.Results.Transform.ArrivalTimer m
+ Simulation.Aivika.Trans.Results.Transform: instance Simulation.Aivika.Trans.Results.Transform.ResultTransformer Simulation.Aivika.Trans.Results.Transform.Operation m
+ Simulation.Aivika.Trans.Results.Transform: instance Simulation.Aivika.Trans.Results.Transform.ResultTransformer Simulation.Aivika.Trans.Results.Transform.Queue m
+ Simulation.Aivika.Trans.Results.Transform: instance Simulation.Aivika.Trans.Results.Transform.ResultTransformer Simulation.Aivika.Trans.Results.Transform.Resource m
+ Simulation.Aivika.Trans.Results.Transform: instance Simulation.Aivika.Trans.Results.Transform.ResultTransformer Simulation.Aivika.Trans.Results.Transform.SamplingCounter m
+ Simulation.Aivika.Trans.Results.Transform: instance Simulation.Aivika.Trans.Results.Transform.ResultTransformer Simulation.Aivika.Trans.Results.Transform.SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: instance Simulation.Aivika.Trans.Results.Transform.ResultTransformer Simulation.Aivika.Trans.Results.Transform.Server m
+ Simulation.Aivika.Trans.Results.Transform: instance Simulation.Aivika.Trans.Results.Transform.ResultTransformer Simulation.Aivika.Trans.Results.Transform.TimingCounter m
+ Simulation.Aivika.Trans.Results.Transform: instance Simulation.Aivika.Trans.Results.Transform.ResultTransformer Simulation.Aivika.Trans.Results.Transform.TimingStats m
+ Simulation.Aivika.Trans.Results.Transform: newtype Activity m
+ Simulation.Aivika.Trans.Results.Transform: newtype ArrivalTimer m
+ Simulation.Aivika.Trans.Results.Transform: newtype Operation m
+ Simulation.Aivika.Trans.Results.Transform: newtype Queue m
+ Simulation.Aivika.Trans.Results.Transform: newtype Resource m
+ Simulation.Aivika.Trans.Results.Transform: newtype SamplingCounter m
+ Simulation.Aivika.Trans.Results.Transform: newtype SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: newtype Server m
+ Simulation.Aivika.Trans.Results.Transform: newtype TimingCounter m
+ Simulation.Aivika.Trans.Results.Transform: newtype TimingStats m
+ Simulation.Aivika.Trans.Results.Transform: operationPreemptionFactor :: Operation m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: operationPreemptionTime :: Operation m -> SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: operationTotalPreemptionTime :: Operation m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: operationTotalUtilisationTime :: Operation m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: operationUtilisationFactor :: Operation m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: operationUtilisationTime :: Operation m -> SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: queueCount :: Queue m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: queueCountStats :: Queue m -> TimingStats m
+ Simulation.Aivika.Trans.Results.Transform: queueFull :: Queue m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: queueLoadFactor :: Queue m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: queueMaxCount :: Queue m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: queueNull :: Queue m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: queueRate :: Queue m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: queueTotalWaitTime :: Queue m -> SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: queueWaitTime :: Queue m -> SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: resourceCount :: Resource m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: resourceCountStats :: Resource m -> TimingStats m
+ Simulation.Aivika.Trans.Results.Transform: resourceQueueCount :: Resource m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: resourceQueueCountStats :: Resource m -> TimingStats m
+ Simulation.Aivika.Trans.Results.Transform: resourceTotalWaitTime :: Resource m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: resourceUtilisationCount :: Resource m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: resourceUtilisationCountStats :: Resource m -> TimingStats m
+ Simulation.Aivika.Trans.Results.Transform: resourceWaitTime :: Resource m -> SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: samplingCounterStats :: SamplingCounter m -> SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: samplingCounterValue :: SamplingCounter m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: samplingStatsCount :: MonadDES m => SamplingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: samplingStatsDeviation :: MonadDES m => SamplingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: samplingStatsMax :: MonadDES m => SamplingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: samplingStatsMean :: MonadDES m => SamplingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: samplingStatsMean2 :: MonadDES m => SamplingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: samplingStatsMin :: MonadDES m => SamplingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: samplingStatsVariance :: MonadDES m => SamplingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: serverInitState :: Server m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: serverInputWaitFactor :: Server m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: serverInputWaitTime :: Server m -> SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: serverOutputWaitFactor :: Server m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: serverOutputWaitTime :: Server m -> SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: serverPreemptionFactor :: Server m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: serverPreemptionTime :: Server m -> SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: serverProcessingFactor :: Server m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: serverProcessingTime :: Server m -> SamplingStats m
+ Simulation.Aivika.Trans.Results.Transform: serverState :: Server m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: serverTotalInputWaitTime :: Server m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: serverTotalOutputWaitTime :: Server m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: serverTotalPreemptionTime :: Server m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: serverTotalProcessingTime :: Server m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: timingCounterStats :: TimingCounter m -> TimingStats m
+ Simulation.Aivika.Trans.Results.Transform: timingCounterValue :: TimingCounter m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: timingStatsCount :: MonadDES m => TimingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: timingStatsDeviation :: MonadDES m => TimingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: timingStatsLastTime :: MonadDES m => TimingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: timingStatsMax :: MonadDES m => TimingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: timingStatsMaxTime :: MonadDES m => TimingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: timingStatsMean :: MonadDES m => TimingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: timingStatsMin :: MonadDES m => TimingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: timingStatsMinTime :: MonadDES m => TimingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: timingStatsStartTime :: MonadDES m => TimingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: timingStatsSum :: MonadDES m => TimingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: timingStatsSum2 :: MonadDES m => TimingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: timingStatsVariance :: MonadDES m => TimingStats m -> ResultTransform m
+ Simulation.Aivika.Trans.Results.Transform: tr :: ResultTransformer t m => t m -> ResultTransform m
+ Simulation.Aivika.Trans.Server: resetServer :: MonadDES m => Server m s a b -> Event m ()
+ Simulation.Aivika.Trans.Signal: data SignalHistory m a
+ Simulation.Aivika.Trans.Signal: handleSignalComposite :: MonadDES m => Signal m a -> (a -> Event m ()) -> Composite m ()
+ Simulation.Aivika.Trans.Signal: newSignalHistory :: MonadDES m => Signal m a -> Composite m (SignalHistory m a)
+ Simulation.Aivika.Trans.Signal: newSignalHistoryStartingWith :: MonadDES m => Maybe a -> Signal m a -> Composite m (SignalHistory m a)
+ Simulation.Aivika.Trans.Signal: readSignalHistory :: MonadDES m => SignalHistory m a -> Event m (Array Int Double, Array Int a)
+ Simulation.Aivika.Trans.Signal: signalHistorySignal :: SignalHistory m a -> Signal m a
+ Simulation.Aivika.Trans.Vector: appendVector :: MonadRef m => Vector m a -> a -> Event m ()
+ Simulation.Aivika.Trans.Vector: copyVector :: MonadRef m => Vector m a -> Event m (Vector m a)
+ Simulation.Aivika.Trans.Vector: data Vector m a
+ Simulation.Aivika.Trans.Vector: freezeVector :: MonadRef m => Vector m a -> Event m (Array Int a)
+ Simulation.Aivika.Trans.Vector: newVector :: MonadRef m => Simulation m (Vector m a)
+ Simulation.Aivika.Trans.Vector: readVector :: MonadRef m => Vector m a -> Int -> Event m a
+ Simulation.Aivika.Trans.Vector: vectorBinarySearch :: (MonadRef m, Ord a) => Vector m a -> a -> Event m Int
+ Simulation.Aivika.Trans.Vector: vectorContains :: (MonadRef m, Eq a) => Vector m a -> a -> Event m Bool
+ Simulation.Aivika.Trans.Vector: vectorContainsBy :: MonadRef m => Vector m a -> (a -> Bool) -> Event m (Maybe a)
+ Simulation.Aivika.Trans.Vector: vectorCount :: MonadRef m => Vector m a -> Event m Int
+ Simulation.Aivika.Trans.Vector: vectorDelete :: (MonadRef m, Eq a) => Vector m a -> a -> Event m Bool
+ Simulation.Aivika.Trans.Vector: vectorDeleteAt :: MonadRef m => Vector m a -> Int -> Event m ()
+ Simulation.Aivika.Trans.Vector: vectorDeleteBy :: MonadRef m => Vector m a -> (a -> Bool) -> Event m (Maybe a)
+ Simulation.Aivika.Trans.Vector: vectorDeleteRange :: MonadRef m => Vector m a -> Int -> Int -> Event m ()
+ Simulation.Aivika.Trans.Vector: vectorIndex :: (MonadRef m, Eq a) => Vector m a -> a -> Event m Int
+ Simulation.Aivika.Trans.Vector: vectorIndexBy :: MonadRef m => Vector m a -> (a -> Bool) -> Event m Int
+ Simulation.Aivika.Trans.Vector: vectorInsert :: MonadRef m => Vector m a -> Int -> a -> Event m ()
+ Simulation.Aivika.Trans.Vector: writeVector :: MonadRef m => Vector m a -> Int -> a -> Event m ()
- Simulation.Aivika.IO.Signal: newSignalHistory :: Signal IO a -> Event IO (SignalHistory IO a)
+ Simulation.Aivika.IO.Signal: newSignalHistory :: Signal IO a -> Composite IO (SignalHistory IO a)
- Simulation.Aivika.IO.Signal: newSignalHistoryStartingWith :: Maybe a -> Signal IO a -> Event IO (SignalHistory IO a)
+ Simulation.Aivika.IO.Signal: newSignalHistoryStartingWith :: Maybe a -> Signal IO a -> Composite IO (SignalHistory IO a)
- Simulation.Aivika.Trans.DES: class (MonadComp m, MonadRef m, EventQueueing m, EnqueueStrategy m FCFS, EnqueueStrategy m LCFS) => MonadDES m
+ Simulation.Aivika.Trans.DES: class (MonadComp m, MonadRef m, MonadRef m, EventQueueing m, EnqueueStrategy m FCFS, EnqueueStrategy m LCFS) => MonadDES m
- Simulation.Aivika.Trans.Parameter: memoParameter :: Parameter IO a -> IO (Parameter IO a)
+ Simulation.Aivika.Trans.Parameter: memoParameter :: (MonadComp m, MonadIO m) => Parameter m a -> m (Parameter m a)

Files

CHANGELOG.md view
@@ -1,4 +1,13 @@ +Version 5.1+-----++* Includes changes destined for Aivika Exension Pack.++* Minor changes in the resource preemption statistics.++* Added the statistics reset.+ Version 5.0 ----- 
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2009-2016 David Sorokin <david.sorokin@gmail.com>+Copyright (c) 2009-2017 David Sorokin <david.sorokin@gmail.com>  All rights reserved. 
Simulation/Aivika/IO.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.IO--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -19,9 +19,7 @@         module Simulation.Aivika.IO.Exception,         module Simulation.Aivika.IO.Generator,         module Simulation.Aivika.IO.QueueStrategy,-        module Simulation.Aivika.IO.Ref.Base,         module Simulation.Aivika.IO.SD,-        module Simulation.Aivika.IO.Signal,         module Simulation.Aivika.IO.Var.Unboxed) where  import Simulation.Aivika.IO.Comp@@ -31,7 +29,5 @@ import Simulation.Aivika.IO.Exception import Simulation.Aivika.IO.Generator import Simulation.Aivika.IO.QueueStrategy-import Simulation.Aivika.IO.Ref.Base import Simulation.Aivika.IO.SD-import Simulation.Aivika.IO.Signal import Simulation.Aivika.IO.Var.Unboxed
Simulation/Aivika/IO/Comp.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.IO.Comp--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/IO/DES.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.IO.DES--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -15,7 +15,8 @@ import Control.Monad.Trans  import Simulation.Aivika.IO.Comp-import Simulation.Aivika.IO.Ref.Base+import qualified Simulation.Aivika.IO.Ref.Base.Strict as StrictRef+import qualified Simulation.Aivika.IO.Ref.Base.Lazy as LazyRef import Simulation.Aivika.IO.Event  import Simulation.Aivika.Trans.Comp
Simulation/Aivika/IO/Dynamics/Memo.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.IO.Dynamics.Memo--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/IO/Dynamics/Memo/Unboxed.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.IO.Dynamics.Memo.Unboxed--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/IO/Event.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.IO.Event--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/IO/Exception.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.IO.Exception--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/IO/Generator.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.IO.Generator--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -32,8 +32,10 @@   data Generator IO =     Generator { generator01 :: IO Double,                 -- ^ the generator of uniform numbers from 0 to 1-                generatorNormal01 :: IO Double+                generatorNormal01 :: IO Double,                 -- ^ the generator of normal numbers with mean 0 and variance 1+                generatorSequenceNo :: IO Int+                -- ^ the generator of sequence numbers               }    {-# INLINE generateUniform #-}@@ -75,6 +77,9 @@   {-# INLINE generateDiscrete #-}   generateDiscrete = generateDiscrete01 . generator01 +  {-# INLINE generateSequenceNo #-}+  generateSequenceNo = generatorSequenceNo +   {-# INLINABLE newGenerator #-}   newGenerator tp =     case tp of@@ -99,8 +104,11 @@   {-# INLINABLE newRandomGenerator01 #-}   newRandomGenerator01 g01 =     do gNormal01 <- newNormalGenerator01 g01+       gSeqNoRef <- newIORef 0+       let gSeqNo = do { x <- readIORef gSeqNoRef; modifyIORef' gSeqNoRef (+1); return x }        return Generator { generator01 = g01,-                          generatorNormal01 = gNormal01 }+                          generatorNormal01 = gNormal01,+                          generatorSequenceNo = gSeqNo }  -- | Create a normal random number generator with mean 0 and variance 1 -- by the specified generator of uniform random numbers from 0 to 1.
Simulation/Aivika/IO/QueueStrategy.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.IO.QueueStrategy--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/IO/Ref/Base.hs view
@@ -1,66 +1,17 @@ -{-# LANGUAGE TypeFamilies #-}- -- | -- Module     : Simulation.Aivika.IO.Ref.Base--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- 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 'IO' monad in an instance of 'MonadRef'.+-- The 'IO' monad in an instance of strict 'MonadRef', but it can also be +-- an instance of similar lazy reference. ---module Simulation.Aivika.IO.Ref.Base () where--import Data.IORef--import Control.Monad-import Control.Monad.Trans--import Simulation.Aivika.Trans.Internal.Types-import Simulation.Aivika.Trans.Ref.Base---- | 'IO' is an instance of 'MonadRef'.-instance MonadRef IO where--- instance (Monad m, MonadIO m, MonadTemplate m) => MonadRef m where--  {-# SPECIALISE instance MonadRef IO #-}--  -- | A type safe wrapper for the 'IORef' reference.-  newtype Ref IO a = Ref { refValue :: IORef a }--  {-# INLINE newRef #-}-  newRef a =-    Simulation $ \r ->-    do x <- liftIO $ newIORef a-       return Ref { refValue = x }-     -  {-# INLINE readRef #-}-  readRef r = Event $ \p ->-    liftIO $ readIORef (refValue r)--  {-# INLINE writeRef #-}-  writeRef r a = Event $ \p -> -    a `seq` liftIO $ writeIORef (refValue r) a--  {-# INLINE modifyRef #-}-  modifyRef r f = Event $ \p -> -    do a <- liftIO $ readIORef (refValue r)-       let b = f a-       b `seq` liftIO $ writeIORef (refValue r) b--  {-# INLINE equalRef #-}-  equalRef (Ref r1) (Ref r2) = (r1 == r2)---- | 'IO' is an instance of 'MonadRef0'.-instance MonadRef0 IO where--- instance (MonadIO m, MonadTemplate m) => MonadRef0 m where+module Simulation.Aivika.IO.Ref.Base +       (module Simulation.Aivika.IO.Ref.Base.Strict) where -  {-# SPECIALISE instance MonadRef0 IO #-}-  -  {-# INLINE newRef0 #-}-  newRef0 a =-    do x <- liftIO $ newIORef a-       return Ref { refValue = x }-     +import Simulation.Aivika.Trans.Ref.Base.Strict+import Simulation.Aivika.IO.Ref.Base.Strict
+ Simulation/Aivika/IO/Ref/Base/Lazy.hs view
@@ -0,0 +1,66 @@++{-# LANGUAGE TypeFamilies #-}++-- |+-- Module     : Simulation.Aivika.IO.Ref.Base.Lazy+-- 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 'IO' monad in an instance of lazy 'MonadRef'.+--+module Simulation.Aivika.IO.Ref.Base.Lazy () where++import Data.IORef++import Control.Monad+import Control.Monad.Trans++import Simulation.Aivika.Trans.Internal.Types+import Simulation.Aivika.Trans.Ref.Base.Lazy++-- | 'IO' is an instance of 'MonadRef'.+instance MonadRef IO where+-- instance (Monad m, MonadIO m, MonadTemplate m) => MonadRef m where++  {-# SPECIALISE instance MonadRef IO #-}++  -- | A type safe wrapper for the 'IORef' reference.+  newtype Ref IO a = Ref { refValue :: IORef a }++  {-# INLINE newRef #-}+  newRef a =+    Simulation $ \r ->+    do x <- liftIO $ newIORef a+       return Ref { refValue = x }+     +  {-# INLINE readRef #-}+  readRef r = Event $ \p ->+    liftIO $ readIORef (refValue r)++  {-# INLINE writeRef #-}+  writeRef r a = Event $ \p -> +    liftIO $ writeIORef (refValue r) a++  {-# INLINE modifyRef #-}+  modifyRef r f = Event $ \p -> +    do a <- liftIO $ readIORef (refValue r)+       let b = f a+       liftIO $ writeIORef (refValue r) b++  {-# INLINE equalRef #-}+  equalRef (Ref r1) (Ref r2) = (r1 == r2)++-- | 'IO' is an instance of 'MonadRef0'.+instance MonadRef0 IO where+-- instance (MonadIO m, MonadTemplate m) => MonadRef0 m where++  {-# SPECIALISE instance MonadRef0 IO #-}+  +  {-# INLINE newRef0 #-}+  newRef0 a =+    do x <- liftIO $ newIORef a+       return Ref { refValue = x }+     
+ Simulation/Aivika/IO/Ref/Base/Strict.hs view
@@ -0,0 +1,66 @@++{-# LANGUAGE TypeFamilies #-}++-- |+-- Module     : Simulation.Aivika.IO.Ref.Base.Strict+-- 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 'IO' monad in an instance of strict 'MonadRef'.+--+module Simulation.Aivika.IO.Ref.Base.Strict () where++import Data.IORef++import Control.Monad+import Control.Monad.Trans++import Simulation.Aivika.Trans.Internal.Types+import Simulation.Aivika.Trans.Ref.Base.Strict++-- | 'IO' is an instance of 'MonadRef'.+instance MonadRef IO where+-- instance (Monad m, MonadIO m, MonadTemplate m) => MonadRef m where++  {-# SPECIALISE instance MonadRef IO #-}++  -- | A type safe wrapper for the 'IORef' reference.+  newtype Ref IO a = Ref { refValue :: IORef a }++  {-# INLINE newRef #-}+  newRef a =+    Simulation $ \r ->+    do x <- liftIO $ newIORef a+       return Ref { refValue = x }+     +  {-# INLINE readRef #-}+  readRef r = Event $ \p ->+    liftIO $ readIORef (refValue r)++  {-# INLINE writeRef #-}+  writeRef r a = Event $ \p -> +    a `seq` liftIO $ writeIORef (refValue r) a++  {-# INLINE modifyRef #-}+  modifyRef r f = Event $ \p -> +    do a <- liftIO $ readIORef (refValue r)+       let b = f a+       b `seq` liftIO $ writeIORef (refValue r) b++  {-# INLINE equalRef #-}+  equalRef (Ref r1) (Ref r2) = (r1 == r2)++-- | 'IO' is an instance of 'MonadRef0'.+instance MonadRef0 IO where+-- instance (MonadIO m, MonadTemplate m) => MonadRef0 m where++  {-# SPECIALISE instance MonadRef0 IO #-}+  +  {-# INLINE newRef0 #-}+  newRef0 a =+    do x <- liftIO $ newIORef a+       return Ref { refValue = x }+     
Simulation/Aivika/IO/Resource/Preemption.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.IO.Resource.Preemption--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -212,6 +212,7 @@                              then do liftIO $ PQ.dequeue (resourceActingQueue r)                                      liftIO $ PQ.enqueue (resourceActingQueue r) (- priority) $ ResourceActingItem priority pid                                      liftIO $ PQ.enqueue (resourceWaitQueue r) p0 (Right $ ResourcePreemptedItem p0 t pid0)+                                     invokeEvent p $ updateResourceWaitTime r 0                                      invokeEvent p $ updateResourceQueueCount r 1                                      invokeEvent p $ processPreemptionBegin pid0                                      invokeEvent p $ resumeCont c ()@@ -268,6 +269,24 @@     | n < 0  = decResourceCount r (- n)     | n > 0  = incResourceCount r n     | n == 0 = return ()++  {-# INLINABLE resetResource #-}+  resetResource r =+    Event $ \p ->+    do let t = pointTime p+       count <- readIORef (resourceCountRef r)+       writeIORef (resourceCountStatsRef r) $+         returnTimingStats t count+       utilCount <- readIORef (resourceUtilisationCountRef r)+       writeIORef (resourceUtilisationCountStatsRef r) $+         returnTimingStats t utilCount+       queueCount <- readIORef (resourceQueueCountRef r)+       writeIORef (resourceQueueCountStatsRef r) $+         returnTimingStats t queueCount+       writeIORef (resourceTotalWaitTimeRef r) 0+       writeIORef (resourceWaitTimeRef r) emptySamplingStats+       invokeEvent p $+         triggerSignal (resourceWaitTimeSource r) ()  -- | Identifies an acting item that acquired the resource. data ResourceActingItem m =
Simulation/Aivika/IO/Resource/Preemption/Base.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.IO.Resource.Preemption.Base--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/IO/SD.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.IO.SD--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/IO/Signal.hs view
@@ -1,13 +1,14 @@  -- | -- Module     : Simulation.Aivika.IO.Signal--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- 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 ----- This module allows collecting the signal history.+-- This module allows collecting the signal history in a more+-- optimal way than it suggests the general implementation. --  module Simulation.Aivika.IO.Signal@@ -28,8 +29,14 @@  import Simulation.Aivika.Trans.DES import Simulation.Aivika.Trans.Internal.Specs+import Simulation.Aivika.Trans.Internal.Dynamics import Simulation.Aivika.Trans.Internal.Event-import Simulation.Aivika.Trans.Signal+import Simulation.Aivika.Trans.Composite+import Simulation.Aivika.Trans.Signal hiding (SignalHistory,+                                              signalHistorySignal,+                                              newSignalHistory,+                                              newSignalHistoryStartingWith,+                                              readSignalHistory)  import Simulation.Aivika.IO.DES @@ -44,31 +51,26 @@                   signalHistoryValues :: V.Vector a }  -- | Create a history of the signal values.-newSignalHistory :: Signal IO a -> Event IO (SignalHistory IO a)--- newSignalHistory :: (MonadDES m, MonadIO m, MonadTemplate m)---                     => Signal m a -> Event m (SignalHistory m a)+newSignalHistory :: Signal IO a -> Composite IO (SignalHistory IO a) {-# INLINABLE newSignalHistory #-} newSignalHistory =   newSignalHistoryStartingWith Nothing  -- | Create a history of the signal values starting with -- the optional initial value.-newSignalHistoryStartingWith :: Maybe a -> Signal IO a -> Event IO (SignalHistory IO a)--- newSignalHistoryStartingWith :: (MonadDES m, MonadIO m, MonadTemplate m)---                                 => Maybe a -> Signal m a -> Event m (SignalHistory m a)+newSignalHistoryStartingWith :: Maybe a -> Signal IO a -> Composite IO (SignalHistory IO a) {-# INLINABLE newSignalHistoryStartingWith #-} newSignalHistoryStartingWith init signal =-  Event $ \p ->   do ts <- liftIO UV.newVector      xs <- liftIO V.newVector      case init of        Nothing -> return ()        Just a ->-         liftIO $-         do UV.appendVector ts (pointTime p)-            V.appendVector xs a-     invokeEvent p $-       handleSignal_ signal $ \a ->+         do t <- liftDynamics time+            liftIO $+              do UV.appendVector ts t+                 V.appendVector xs a+     handleSignalComposite signal $ \a ->        Event $ \p ->        liftIO $        do UV.appendVector ts (pointTime p)
Simulation/Aivika/IO/Var.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.IO.Var--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/IO/Var/Unboxed.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.IO.Var.Unboxed--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Activity.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Activity--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -30,6 +30,8 @@         activityUtilisationFactor,         activityIdleFactor,         activityPreemptionFactor,+        -- * Statistics Reset+        resetActivity,         -- * Summary         activitySummary,         -- * Derived Signals for Properties@@ -609,3 +611,15 @@        showString tab .        showString "preemption time:\n\n" .        samplingStatsSummary xs3 (2 + indent)++-- | Reset the statistics.+resetActivity :: MonadDES m => Activity m s a b -> Event m ()+{-# INLINABLE resetActivity #-}+resetActivity act =+  do writeRef (activityTotalUtilisationTimeRef act) 0+     writeRef (activityTotalIdleTimeRef act) 0+     writeRef (activityTotalPreemptionTimeRef act) 0+     writeRef (activityUtilisationTimeRef act) mempty+     writeRef (activityIdleTimeRef act) mempty+     writeRef (activityPreemptionTimeRef act) mempty+  
Simulation/Aivika/Trans/Activity/Random.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Activity.Random--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Agent.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Agent--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Array.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Array--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Arrival.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Arrival--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -22,7 +22,8 @@         arrivalTimerChannel,         arrivalProcessingTime,         arrivalProcessingTimeChanged,-        arrivalProcessingTimeChanged_) where+        arrivalProcessingTimeChanged_,+        resetArrivalTimer) where  import Control.Monad import Control.Monad.Trans@@ -111,3 +112,10 @@ arrivalTimerChannel timer =   Channel $ \sa ->   return $ arrivalTimerSignal timer sa++-- | Reset the statistics.+resetArrivalTimer :: MonadDES m => ArrivalTimer m -> Event m ()+{-# INLINABLE resetArrivalTimer #-}+resetArrivalTimer timer =+  do writeRef (arrivalProcessingTimeRef timer) emptySamplingStats+     triggerSignal (arrivalProcessingTimeChangedSource timer) ()
Simulation/Aivika/Trans/Channel.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Channel--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Circuit.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Circuit--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Comp.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Comp--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Composite.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Composite--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -15,6 +15,7 @@ module Simulation.Aivika.Trans.Composite        (-- * Composite Monad         Composite,+        CompositeLift(..),         runComposite,         runComposite_,         runCompositeInStartTime_,@@ -159,3 +160,14 @@     Composite $ \h0 ->     do a <- liftEvent m        return (a, h0)++-- | A type class to lift the 'Composite' computation to other computations.+class CompositeLift t m where+  +  -- | Lift the specified 'Composite' computation to another computation.+  liftComposite :: Composite m a -> t m a++instance Monad m => CompositeLift Composite m where++  {-# INLINE liftComposite #-}+  liftComposite = id
+ Simulation/Aivika/Trans/Concurrent/MVar.hs view
@@ -0,0 +1,79 @@++-- |+-- Module     : Simulation.Aivika.Trans.Concurrent.MVar+-- 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 helper functions for working with 'MVar'.+--+module Simulation.Aivika.Trans.Concurrent.MVar+       (withMVarComp,+        withMVarParameter,+        withMVarSimulation,+        withMVarDynamics,+        withMVarEvent,+        withMVarProcess) where++import Control.Concurrent.MVar+import Control.Monad+import Control.Monad.Trans++import Simulation.Aivika.Trans.Exception+import Simulation.Aivika.Trans.Comp+import Simulation.Aivika.Trans.DES+import Simulation.Aivika.Trans.Parameter+import Simulation.Aivika.Trans.Simulation+import Simulation.Aivika.Trans.Dynamics+import Simulation.Aivika.Trans.Event+import Simulation.Aivika.Trans.Process++-- | Like 'withMVar' but operates within the specified computation.+withMVarComp :: (MonadComp m, MonadIO m) => MVar a -> (a -> m b) -> m b+withMVarComp v f =+  do a <- liftIO $ takeMVar v+     finallyComp+       (f a)+       (liftIO $ putMVar v a)++-- | Like 'withMVar' but operates within the 'Parameter' computation.+withMVarParameter :: (MonadComp m, MonadIO m) => MVar a -> (a -> Parameter m b) -> Parameter m b+withMVarParameter v f =+  do a <- liftIO $ takeMVar v+     finallyParameter+       (f a)+       (liftIO $ putMVar v a)++-- | Like 'withMVar' but operates within the 'Simulation' computation.+withMVarSimulation :: (MonadComp m, MonadIO m) => MVar a -> (a -> Simulation m b) -> Simulation m b+withMVarSimulation v f =+  do a <- liftIO $ takeMVar v+     finallySimulation+       (f a)+       (liftIO $ putMVar v a)++-- | Like 'withMVar' but operates within the 'Dynamics' computation.+withMVarDynamics :: (MonadComp m, MonadIO m) => MVar a -> (a -> Dynamics m b) -> Dynamics m b+withMVarDynamics v f =+  do a <- liftIO $ takeMVar v+     finallyDynamics+       (f a)+       (liftIO $ putMVar v a)++-- | Like 'withMVar' but operates within the 'Event' computation.+withMVarEvent :: (MonadComp m, MonadIO m) => MVar a -> (a -> Event m b) -> Event m b+withMVarEvent v f =+  do a <- liftIO $ takeMVar v+     finallyEvent+       (f a)+       (liftIO $ putMVar v a)++-- | Like 'withMVar' but operates within the 'Process' computation.+withMVarProcess :: (MonadDES m, MonadIO m) => MVar a -> (a -> Process m b) -> Process m b+withMVarProcess v f =+  do a <- liftIO $ takeMVar v+     finallyProcess+       (f a)+       (liftIO $ putMVar v a)
+ Simulation/Aivika/Trans/Concurrent/MVar.hs-boot view
@@ -0,0 +1,21 @@++-- |+-- Module     : Simulation.Aivika.Trans.Concurrent.MVar+-- 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 helper functions for working with 'MVar'.+--+module Simulation.Aivika.Trans.Concurrent.MVar+       (withMVarComp) where++import Control.Concurrent.MVar+import Control.Monad+import Control.Monad.Trans++import Simulation.Aivika.Trans.Comp++withMVarComp :: (MonadComp m, MonadIO m) => MVar a -> (a -> m b) -> m b
Simulation/Aivika/Trans/Cont.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Cont--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/DES.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.DES--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -14,13 +14,15 @@ module Simulation.Aivika.Trans.DES (MonadDES) where  import Simulation.Aivika.Trans.Comp-import Simulation.Aivika.Trans.Ref.Base+import qualified Simulation.Aivika.Trans.Ref.Base.Strict as StrictRef+import qualified Simulation.Aivika.Trans.Ref.Base.Lazy as LazyRef import Simulation.Aivika.Trans.Internal.Types import Simulation.Aivika.Trans.QueueStrategy  -- | It defines a type class of monads for DES. class (MonadComp m,-       MonadRef m,+       StrictRef.MonadRef m,+       LazyRef.MonadRef m,        EventQueueing m,        EnqueueStrategy m FCFS,        EnqueueStrategy m LCFS) => MonadDES m
Simulation/Aivika/Trans/DoubleLinkedList.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.DoubleLinkedList--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Dynamics.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Dynamics--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Dynamics/Extra.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Dynamics.Extra--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Dynamics/Memo.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Dynamics.Memo--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Dynamics/Memo/Unboxed.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Dynamics.Memo.Unboxed--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Dynamics/Random.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Dynamics.Random--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Event.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Event--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Exception.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Exception--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Gate.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Gate--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -16,6 +16,7 @@         newGateClosed,         openGate,         closeGate,+        invertGate,         gateOpened,         gateClosed,         awaitGateOpened,@@ -62,6 +63,12 @@ {-# INLINE closeGate #-} closeGate gate =   writeRef (gateRef gate) False++-- | Invert the gate.+invertGate :: MonadDES m => Gate m -> Event m ()+{-# INLINABLE invertGate #-}+invertGate gate =+  modifyRef (gateRef gate) not  -- | Test whether the gate is open. gateOpened :: MonadDES m => Gate m -> Event m Bool
Simulation/Aivika/Trans/Generator.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Generator--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -85,6 +85,9 @@   -- | Generate a random value from the specified discrete distribution.   generateDiscrete :: forall a. Generator m -> DiscretePDF a -> m a +  -- | Generate a sequence number which can be considered quite unique.+  generateSequenceNo :: Generator m -> m Int+                 -- | Create a new random number generator.   newGenerator :: GeneratorType m -> m (Generator m) 
Simulation/Aivika/Trans/Generator/Primitive.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Generator.Primitive--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Internal/Cont.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Internal.Cont--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -51,6 +51,7 @@         substituteCont,         contCanceled,         contAwait,+        transferCont,         traceCont) where  import Data.Array@@ -903,6 +904,27 @@                                   Just c  ->                                     invokeEvent p $ reenterCont c a      invokeEvent p $ writeRef rh $ Just h          ++-- | Like the GoTo statement it transfers the direction of computation,+-- but raises an exception when used within 'catchCont' or 'finallyCont'.+transferCont :: MonadDES m => Cont m () -> Cont m a+{-# INLINABLE transferCont #-}+transferCont x =+  Cont $ \c ->+  Event $ \p ->+  do let worker =+           do let cid   = contId $ contAux c+                  cont  = return+                  econt = throwEvent+                  ccont = return+              when (contCatchFlag $ contAux c) $+                error "Cannot be combined with the exception handling: unsafeTransferCont"+              invokeEvent p $+                runCont x cont econt ccont cid False+     z <- invokeEvent p $ contCanceled c+     if z+       then invokeEvent p $ cancelCont c+       else worker  -- | Show the debug message with the current simulation time. traceCont :: MonadDES m => String -> Cont m a -> Cont m a
Simulation/Aivika/Trans/Internal/Dynamics.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Internal.Dynamics--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Internal/Event.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Internal.Event--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Internal/Parameter.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Internal.Parameter--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -57,6 +57,7 @@ import Simulation.Aivika.Trans.DES import Simulation.Aivika.Trans.Internal.Types import Simulation.Aivika.Trans.Internal.Specs+import {-# SOURCE #-} Simulation.Aivika.Trans.Concurrent.MVar  instance Monad m => Monad (Parameter m) where @@ -284,23 +285,23 @@ -- within a simulation run. However, the value will be recalculated for other -- simulation runs. Also it is thread-safe when different simulation runs -- are executed in parallel on physically different operating system threads.-memoParameter :: Parameter IO a -> IO (Parameter IO a)+memoParameter :: (MonadComp m, MonadIO m) => Parameter m a -> m (Parameter m a) memoParameter x = -  do lock <- newMVar ()-     dict <- newIORef M.empty+  do lock <- liftIO $ newMVar ()+     dict <- liftIO $ newIORef M.empty      return $ Parameter $ \r ->        do let i = runIndex r-          m <- readIORef dict+          m <- liftIO $ readIORef dict           if M.member i m             then do let Just v = M.lookup i m                     return v-            else withMVar lock $ -                 \() -> do { m <- readIORef dict;+            else withMVarComp lock $ +                 \() -> do { m <- liftIO $ readIORef dict;                              if M.member i m                              then do let Just v = M.lookup i m                                      return v                              else do v <- invokeParameter r x-                                     writeIORef dict $ M.insert i v m+                                     liftIO $ writeIORef dict $ M.insert i v m                                      return v }  -- | Return a parameter which value is taken consequently from the specified table
Simulation/Aivika/Trans/Internal/Process.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Internal.Process--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -48,9 +48,12 @@         holdProcess,         interruptProcess,         processInterrupted,+        processInterruptionTime,         passivateProcess,+        passivateProcessBefore,         processPassive,         reactivateProcess,+        reactivateProcessImmediately,         cancelProcessWithId,         cancelProcess,         processCancelled,@@ -87,6 +90,8 @@         neverProcess,         -- * Retrying Computation         retryProcess,+        -- * GoTo Statement+        transferProcess,         -- * Debugging         traceProcess) where @@ -179,6 +184,21 @@   Event $ \p ->   invokeEvent p $ readRef (processInterruptRef pid) +-- | Return the expected interruption time after finishing the 'holdProcess' computation,+-- which value may change if the corresponding process is preempted.+processInterruptionTime :: MonadDES m => ProcessId m -> Event m (Maybe Double)+{-# INLINABLE processInterruptionTime #-}+processInterruptionTime pid =+  Event $ \p ->+  do let x = processInterruptCont pid+     a <- invokeEvent p $ readRef x+     case a of+       Just c  ->+         do t <- invokeEvent p $ readRef (processInterruptTime pid)+            return (Just t)+       Nothing ->+         return Nothing+ -- | Define a reaction when the process with the specified identifier is preempted. processPreempted :: MonadDES m => ProcessId m -> Event m () {-# INLINABLE processPreempted #-}@@ -224,6 +244,21 @@        Nothing -> invokeEvent p $ writeRef x $ Just c        Just _  -> error "Cannot passivate the process twice: passivateProcess" +-- | Passivate the process before performing some action.+passivateProcessBefore :: MonadDES m => Event m () -> Process m ()+{-# INLINABLE passivateProcessBefore #-}+passivateProcessBefore m =+  Process $ \pid ->+  Cont $ \c ->+  Event $ \p ->+  do let x = processReactCont pid+     a <- invokeEvent p $ readRef x+     case a of+       Nothing ->+         do invokeEvent p $ writeRef x $ Just c+            invokeEvent p m+       Just _  -> error "Cannot passivate the process twice: passivateProcessBefore"+ -- | Test whether the process with the specified identifier is passivated. processPassive :: MonadDES m => ProcessId m -> Event m Bool {-# INLINABLE processPassive #-}@@ -247,6 +282,20 @@          do invokeEvent p $ writeRef x Nothing             invokeEvent p $ enqueueEvent (pointTime p) $ resumeCont c () +-- | Reactivate a process with the specified identifier immediately.+reactivateProcessImmediately :: MonadDES m => ProcessId m -> Event m ()+{-# INLINABLE reactivateProcessImmediately #-}+reactivateProcessImmediately pid =+  Event $ \p ->+  do let x = processReactCont pid+     a <- invokeEvent p $ readRef x+     case a of+       Nothing -> +         return ()+       Just c ->+         do invokeEvent p $ writeRef x Nothing+            invokeEvent p $ resumeCont c ()+ -- | Prepare the processes identifier for running. processIdPrepare :: MonadDES m => ProcessId m -> Event m () {-# INLINABLE processIdPrepare #-}@@ -768,7 +817,15 @@ -- | Retry the current computation as possible, using the specified argument -- as a 'SimulationRetry' exception message in case of failure. retryProcess :: MonadDES m => String -> Process m a+{-# INLINABLE retryProcess #-} retryProcess = liftEvent . retryEvent++-- | Like the GoTo statement it transfers the direction of computation,+-- but raises an exception when used within 'catchProcess' or 'finallyProcess'.+transferProcess :: MonadDES m => Process m () -> Process m a+{-# INLINABLE transferProcess #-}+transferProcess (Process m) =+  Process $ \pid -> transferCont (m pid)  -- | Show the debug message with the current simulation time. traceProcess :: MonadDES m => String -> Process m a -> Process m a
Simulation/Aivika/Trans/Internal/Simulation.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Internal.Simulation--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Internal/Specs.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Internal.Specs--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Internal/Types.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Internal.Types--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Net.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Net--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Net/Random.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Net.Random--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Observable.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Observable--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Operation.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Operation--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -22,6 +22,8 @@         operationPreemptionTime,         operationUtilisationFactor,         operationPreemptionFactor,+        -- * Statistics Reset+        resetOperation,         -- * Summary         operationSummary,         -- * Derived Signals for Properties@@ -72,7 +74,7 @@               -- ^ Provide @b@ by specified @a@.               operationProcessPreemptible :: Bool,               -- ^ Whether the process is preemptible.-              operationStartTime :: Double,+              operationStartTimeRef :: Ref m Double,               -- ^ The start time of creating the operation.               operationLastTimeRef :: Ref m Double,               -- ^ The last time of utilising the operation activity.@@ -116,6 +118,7 @@ {-# INLINABLE newPreemptibleOperation #-} newPreemptibleOperation preemptible provide =   do t0 <- liftDynamics time+     r' <- liftSimulation $ newRef t0      r0 <- liftSimulation $ newRef t0      r1 <- liftSimulation $ newRef 0      r2 <- liftSimulation $ newRef 0@@ -127,7 +130,7 @@      s4 <- liftSimulation newSignalSource      return Operation { operationInitProcess = provide,                         operationProcessPreemptible = preemptible,-                        operationStartTime = t0,+                        operationStartTimeRef = r',                         operationLastTimeRef = r0,                         operationTotalUtilisationTimeRef = r1,                         operationTotalPreemptionTimeRef = r2,@@ -300,7 +303,7 @@ {-# INLINABLE operationUtilisationFactor #-} operationUtilisationFactor op =   Event $ \p ->-  do let t0 = operationStartTime op+  do t0 <- invokeEvent p $ readRef (operationStartTimeRef op)      t1 <- invokeEvent p $ readRef (operationLastTimeRef op)      x  <- invokeEvent p $ readRef (operationTotalUtilisationTimeRef op)      return (x / (t1 - t0))@@ -330,7 +333,7 @@ {-# INLINABLE operationPreemptionFactor #-} operationPreemptionFactor op =   Event $ \p ->-  do let t0 = operationStartTime op+  do t0 <- invokeEvent p $ readRef (operationStartTimeRef op)      t1 <- invokeEvent p $ readRef (operationLastTimeRef op)      x  <- invokeEvent p $ readRef (operationTotalPreemptionTimeRef op)      return (x / (t1 - t0))@@ -382,7 +385,7 @@ {-# INLINABLE operationSummary #-} operationSummary op indent =   Event $ \p ->-  do let t0 = operationStartTime op+  do t0  <- invokeEvent p $ readRef (operationStartTimeRef op)      t1  <- invokeEvent p $ readRef (operationLastTimeRef op)      tx1 <- invokeEvent p $ readRef (operationTotalUtilisationTimeRef op)      tx2 <- invokeEvent p $ readRef (operationTotalPreemptionTimeRef op)@@ -411,3 +414,15 @@        showString tab .        showString "preemption time:\n\n" .        samplingStatsSummary xs2 (2 + indent)++-- | Reset the statistics.+resetOperation :: MonadDES m => Operation m a b -> Event m ()+{-# INLINABLE resetOperation #-}+resetOperation op =+  do t0 <- liftDynamics time+     writeRef (operationStartTimeRef op) t0+     writeRef (operationLastTimeRef op) t0+     writeRef (operationTotalUtilisationTimeRef op) 0+     writeRef (operationTotalPreemptionTimeRef op) 0+     writeRef (operationUtilisationTimeRef op) emptySamplingStats+     writeRef (operationPreemptionTimeRef op) emptySamplingStats
Simulation/Aivika/Trans/Operation/Random.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Operation.Random--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Parameter.hs view
@@ -1,6 +1,6 @@ -- | -- Module     : Simulation.Aivika.Trans.Parameter--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Parameter/Random.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Parameter.Random--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Process.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Process--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -48,9 +48,12 @@         holdProcess,         interruptProcess,         processInterrupted,+        processInterruptionTime,         passivateProcess,+        passivateProcessBefore,         processPassive,         reactivateProcess,+        reactivateProcessImmediately,         cancelProcessWithId,         cancelProcess,         processCancelled,@@ -85,6 +88,8 @@         neverProcess,         -- * Retrying Computation         retryProcess,+        -- * GoTo Statement+        transferProcess,         -- * Debugging         traceProcess) where 
Simulation/Aivika/Trans/Process/Random.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Process.Random--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Processor.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Processor--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Processor/Random.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Processor.Random--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Processor/RoundRobbin.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Processor.RoundRobbin--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Queue.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Queue--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -72,6 +72,8 @@         queueContains,         queueContainsBy,         clearQueue,+        -- * Statistics Reset+        resetQueue,         -- * Awaiting         waitWhileFullQueue,         -- * Summary@@ -1353,3 +1355,22 @@        showString tab .        showString "the dequeue wait time (when was requested for dequeueing -> when was dequeued) = \n\n" .        samplingStatsSummary dequeueWaitTime (2 + indent)++-- | Reset the statistics.+resetQueue :: MonadDES m => Queue m si sm so a -> Event m ()+{-# INLINABLE resetQueue #-}+resetQueue q =+  Event $ \p ->+  do let t = pointTime p+     queueCount <- invokeEvent p $ readRef (queueCountRef q)+     invokeEvent p $ writeRef (queueCountStatsRef q) $+       returnTimingStats t queueCount+     invokeEvent p $ writeRef (enqueueCountRef q) 0+     invokeEvent p $ writeRef (enqueueLostCountRef q) 0+     invokeEvent p $ writeRef (enqueueStoreCountRef q) 0+     invokeEvent p $ writeRef (dequeueCountRef q) 0+     invokeEvent p $ writeRef (dequeueExtractCountRef q) 0+     invokeEvent p $ writeRef (queueWaitTimeRef q) mempty+     invokeEvent p $ writeRef (queueTotalWaitTimeRef q) mempty+     invokeEvent p $ writeRef (enqueueWaitTimeRef q) mempty+     invokeEvent p $ writeRef (dequeueWaitTimeRef q) mempty
Simulation/Aivika/Trans/Queue/Base.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Queue.Base--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Queue/Infinite.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Queue.Infinite--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -52,6 +52,8 @@         queueContains,         queueContainsBy,         clearQueue,+        -- * Statistics Reset+        resetQueue,         -- * Summary         queueSummary,         -- * Derived Signals for Properties@@ -838,3 +840,18 @@        showString tab .        showString "the dequeue wait time (when was requested for dequeueing -> when was dequeued) = \n\n" .        samplingStatsSummary dequeueWaitTime (2 + indent)++-- | Reset the statistics.+resetQueue :: MonadDES m => Queue m sm so a -> Event m ()+{-# INLINABLE resetQueue #-}+resetQueue q =+  Event $ \p ->+  do let t = pointTime p+     queueCount <- invokeEvent p $ readRef (queueCountRef q)+     invokeEvent p $ writeRef (queueCountStatsRef q) $+       returnTimingStats t queueCount+     invokeEvent p $ writeRef (enqueueStoreCountRef q) 0+     invokeEvent p $ writeRef (dequeueCountRef q) 0+     invokeEvent p $ writeRef (dequeueExtractCountRef q) 0+     invokeEvent p $ writeRef (queueWaitTimeRef q) mempty+     invokeEvent p $ writeRef (dequeueWaitTimeRef q) mempty
Simulation/Aivika/Trans/Queue/Infinite/Base.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Queue.Infinite.Base--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/QueueStrategy.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.QueueStrategy--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Ref.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Ref--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Ref/Base.hs view
@@ -1,9 +1,7 @@ -{-# LANGUAGE TypeFamilies, MultiParamTypeClasses #-}- -- | -- Module     : Simulation.Aivika.Trans.Ref.Base--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -12,53 +10,11 @@ -- This module defines a plain and more fast version of an updatable reference -- that depends on the event queue but that doesn't supply with the signal notification. --+-- By default, the module uses a strict version defined in "Simulation.Aivika.Trans.Ref.Base.Strict".+-- There is also another lazy version defined in "Simulation.Aivika.Trans.Ref.Base.Lazy".+-- module Simulation.Aivika.Trans.Ref.Base-       (MonadRef(..),-        MonadRef0(..)) where--import Data.IORef--import Control.Monad-import Control.Monad.Trans--import Simulation.Aivika.Trans.Internal.Types-import Simulation.Aivika.Trans.Observable---- | A monad within which we can create mutable references.-class Monad m => MonadRef m where--  -- | The 'Ref' type represents a mutable variable similar to the 'IORef' variable -  -- but only dependent on the event queue, which allows synchronizing the reference-  -- with the model explicitly through the 'Event' monad.-  data Ref m a--  -- | Create a new reference.-  newRef :: a -> Simulation m (Ref m a)-     -  -- | Read the value of a reference.-  readRef :: Ref m a -> Event m a--  -- | Write a new value into the reference.-  writeRef :: Ref m a -> a -> Event m ()--  -- | Mutate the contents of the reference.-  modifyRef :: Ref m a -> (a -> a) -> Event m ()--  -- | Compare two references for equality.-  equalRef :: Ref m a -> Ref m a -> Bool--instance MonadRef m => Eq (Ref m a) where--  {-# INLINE (==) #-}-  (==) = equalRef---- | A kind of reference that can be created within more low level computation than 'Simulation'.-class MonadRef m => MonadRef0 m where--  -- | Create a new reference within more low level computation than 'Simulation'.-  newRef0 :: a -> m (Ref m a)--instance (Monad m, MonadRef m) => Observable (Ref m) (Event m) where+       (module Simulation.Aivika.Trans.Ref.Base.Strict) where -  {-# INLINE readObservable #-}-  readObservable = readRef+import Simulation.Aivika.Trans.Ref.Base.Strict+import Simulation.Aivika.Trans.Ref.Base.Lazy
+ Simulation/Aivika/Trans/Ref/Base/Lazy.hs view
@@ -0,0 +1,64 @@++{-# LANGUAGE TypeFamilies, MultiParamTypeClasses #-}++-- |+-- Module     : Simulation.Aivika.Trans.Ref.Base.Lazy+-- 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+--+-- This module defines a plain and more fast version of an updatable and lazy reference+-- that depends on the event queue but that doesn't supply with the signal notification.+--+module Simulation.Aivika.Trans.Ref.Base.Lazy+       (MonadRef(..),+        MonadRef0(..)) where++import Data.IORef++import Control.Monad+import Control.Monad.Trans++import Simulation.Aivika.Trans.Internal.Types+import Simulation.Aivika.Trans.Observable++-- | A monad within which we can create mutable references.+class Monad m => MonadRef m where++  -- | The 'Ref' type represents a mutable variable similar to the 'IORef' variable +  -- but only dependent on the event queue, which allows synchronizing the reference+  -- with the model explicitly through the 'Event' monad.+  data Ref m a++  -- | Create a new reference.+  newRef :: a -> Simulation m (Ref m a)+     +  -- | Read the value of a reference.+  readRef :: Ref m a -> Event m a++  -- | Write a new value into the reference.+  writeRef :: Ref m a -> a -> Event m ()++  -- | Mutate the contents of the reference.+  modifyRef :: Ref m a -> (a -> a) -> Event m ()++  -- | Compare two references for equality.+  equalRef :: Ref m a -> Ref m a -> Bool++instance MonadRef m => Eq (Ref m a) where++  {-# INLINE (==) #-}+  (==) = equalRef++-- | A kind of reference that can be created within more low level computation than 'Simulation'.+class MonadRef m => MonadRef0 m where++  -- | Create a new reference within more low level computation than 'Simulation'.+  newRef0 :: a -> m (Ref m a)++instance (Monad m, MonadRef m) => Observable (Ref m) (Event m) where++  {-# INLINE readObservable #-}+  readObservable = readRef
+ Simulation/Aivika/Trans/Ref/Base/Strict.hs view
@@ -0,0 +1,64 @@++{-# LANGUAGE TypeFamilies, MultiParamTypeClasses #-}++-- |+-- Module     : Simulation.Aivika.Trans.Ref.Base.Strict+-- 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+--+-- This module defines a plain and more fast version of an updatable and strict reference+-- that depends on the event queue but that doesn't supply with the signal notification.+--+module Simulation.Aivika.Trans.Ref.Base.Strict+       (MonadRef(..),+        MonadRef0(..)) where++import Data.IORef++import Control.Monad+import Control.Monad.Trans++import Simulation.Aivika.Trans.Internal.Types+import Simulation.Aivika.Trans.Observable++-- | A monad within which we can create mutable references.+class Monad m => MonadRef m where++  -- | The 'Ref' type represents a mutable variable similar to the 'IORef' variable +  -- but only dependent on the event queue, which allows synchronizing the reference+  -- with the model explicitly through the 'Event' monad.+  data Ref m a++  -- | Create a new reference.+  newRef :: a -> Simulation m (Ref m a)+     +  -- | Read the value of a reference.+  readRef :: Ref m a -> Event m a++  -- | Write a new value into the reference.+  writeRef :: Ref m a -> a -> Event m ()++  -- | Mutate the contents of the reference.+  modifyRef :: Ref m a -> (a -> a) -> Event m ()++  -- | Compare two references for equality.+  equalRef :: Ref m a -> Ref m a -> Bool++instance MonadRef m => Eq (Ref m a) where++  {-# INLINE (==) #-}+  (==) = equalRef++-- | A kind of reference that can be created within more low level computation than 'Simulation'.+class MonadRef m => MonadRef0 m where++  -- | Create a new reference within more low level computation than 'Simulation'.+  newRef0 :: a -> m (Ref m a)++instance (Monad m, MonadRef m) => Observable (Ref m) (Event m) where++  {-# INLINE readObservable #-}+  readObservable = readRef
Simulation/Aivika/Trans/Resource.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Resource--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -55,6 +55,8 @@         -- * Altering Resource         incResourceCount,         decResourceCount,+        -- * Statistics Reset+        resetResource,         -- * Signals         resourceCountChanged,         resourceCountChanged_,@@ -637,5 +639,25 @@      invokeEvent p $        modifyRef (resourceWaitTimeRef r) $        addSamplingStats delta+     invokeEvent p $+       triggerSignal (resourceWaitTimeSource r) ()++-- | Reset the statistics.+resetResource :: MonadDES m => Resource m s -> Event m ()+{-# INLINABLE resetResource #-}+resetResource r =+  Event $ \p ->+  do let t = pointTime p+     count <- invokeEvent p $ readRef (resourceCountRef r)+     invokeEvent p $ writeRef (resourceCountStatsRef r) $+       returnTimingStats t count+     utilCount <- invokeEvent p $ readRef (resourceUtilisationCountRef r)+     invokeEvent p $ writeRef (resourceUtilisationCountStatsRef r) $+       returnTimingStats t utilCount+     queueCount <- invokeEvent p $ readRef (resourceQueueCountRef r)+     invokeEvent p $ writeRef (resourceQueueCountStatsRef r) $+       returnTimingStats t queueCount+     invokeEvent p $ writeRef (resourceTotalWaitTimeRef r) 0+     invokeEvent p $ writeRef (resourceWaitTimeRef r) emptySamplingStats      invokeEvent p $        triggerSignal (resourceWaitTimeSource r) ()
Simulation/Aivika/Trans/Resource/Base.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Resource.Base--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Resource/Preemption.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Resource.Preemption--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -153,3 +153,6 @@                         -> Int                         -- ^ a change of the resource count                         -> Event m ()++  -- | Reset the statistics.+  resetResource :: Resource m -> Event m ()
Simulation/Aivika/Trans/Resource/Preemption/Base.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Resource.Preemption.Base--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Results.hs view
@@ -1,9 +1,9 @@ -{-# LANGUAGE FlexibleContexts, FlexibleInstances, UndecidableInstances, ExistentialQuantification, MultiParamTypeClasses, FunctionalDependencies #-}+{-# LANGUAGE FlexibleContexts, FlexibleInstances, UndecidableInstances, ExistentialQuantification, MultiParamTypeClasses, FunctionalDependencies, OverlappingInstances #-}  -- | -- Module     : Simulation.Aivika.Trans.Results--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -1888,71 +1888,176 @@ intSubscript :: Int -> ResultName intSubscript i = "[" ++ show i ++ "]" -instance ResultComputing t m => ResultProvider (t m Double) m where+instance {-# OVERLAPPABLE #-} (MonadDES m, ResultItemable (ResultValue a)) => ResultProvider (Parameter m a) m where    resultSource' name i m =     ResultItemSource $ ResultItem $ computeResultValue name i m -instance ResultComputing t m => ResultProvider (t m [Double]) m where+instance {-# OVERLAPPABLE #-} (MonadDES m, ResultItemable (ResultValue a)) => ResultProvider (Simulation m a) m where    resultSource' name i m =     ResultItemSource $ ResultItem $ computeResultValue name i m -instance ResultComputing t m => ResultProvider (t m (SamplingStats Double)) m where+instance {-# OVERLAPPABLE #-} (MonadDES m, ResultItemable (ResultValue a)) => ResultProvider (Dynamics m a) m where    resultSource' name i m =     ResultItemSource $ ResultItem $ computeResultValue name i m -instance ResultComputing t m => ResultProvider (t m (TimingStats Double)) m where+instance {-# OVERLAPPABLE #-} (MonadDES m, ResultItemable (ResultValue a)) => ResultProvider (Event m a) m where    resultSource' name i m =     ResultItemSource $ ResultItem $ computeResultValue name i m -instance ResultComputing t m => ResultProvider (t m (SamplingCounter Double)) m where+instance {-# OVERLAPPABLE #-} (MonadDES m, ResultItemable (ResultValue a)) => ResultProvider (Ref m a) m where    resultSource' name i m =-    samplingCounterResultSource $ computeResultValue name i m+    ResultItemSource $ ResultItem $ computeResultValue name i m -instance ResultComputing t m => ResultProvider (t m (TimingCounter Double)) m where+instance {-# OVERLAPPABLE #-} (MonadDES m, ResultItemable (ResultValue a)) => ResultProvider (B.Ref m a) m where    resultSource' name i m =-    timingCounterResultSource $ computeResultValue name i m+    ResultItemSource $ ResultItem $ computeResultValue name i m -instance ResultComputing t m => ResultProvider (t m Int) m where+instance {-# OVERLAPPABLE #-} (MonadDES m, MonadVar m, ResultItemable (ResultValue a)) => ResultProvider (Var m a) m where    resultSource' name i m =     ResultItemSource $ ResultItem $ computeResultValue name i m -instance ResultComputing t m => ResultProvider (t m [Int]) m where+instance {-# OVERLAPPABLE #-} (MonadDES m, ResultItemable (ResultValue a)) => ResultProvider (Signalable m a) m where    resultSource' name i m =     ResultItemSource $ ResultItem $ computeResultValue name i m -instance ResultComputing t m => ResultProvider (t m (SamplingStats Int)) m where+instance {-# OVERLAPPING #-} (MonadDES m,+                              ResultItemable (ResultValue a),+                              ResultItemable (ResultValue (SamplingStats a)))+                             => ResultProvider (Parameter m (SamplingCounter a)) m where    resultSource' name i m =-    ResultItemSource $ ResultItem $ computeResultValue name i m+    samplingCounterResultSource $ computeResultValue name i m -instance ResultComputing t m => ResultProvider (t m (TimingStats Int)) m where+instance {-# OVERLAPPING #-} (MonadDES m,+                              ResultItemable (ResultValue a),+                              ResultItemable (ResultValue (SamplingStats a)))+                             => ResultProvider (Simulation m (SamplingCounter a)) m where    resultSource' name i m =-    ResultItemSource $ ResultItem $ computeResultValue name i m+    samplingCounterResultSource $ computeResultValue name i m -instance ResultComputing t m => ResultProvider (t m (SamplingCounter Int)) m where+instance {-# OVERLAPPING #-} (MonadDES m,+                              ResultItemable (ResultValue a),+                              ResultItemable (ResultValue (SamplingStats a)))+                             => ResultProvider (Dynamics m (SamplingCounter a)) m where    resultSource' name i m =     samplingCounterResultSource $ computeResultValue name i m -instance ResultComputing t m => ResultProvider (t m (TimingCounter Int)) m where+instance {-# OVERLAPPING #-} (MonadDES m,+                              ResultItemable (ResultValue a),+                              ResultItemable (ResultValue (SamplingStats a)))+                             => ResultProvider (Event m (SamplingCounter a)) m where    resultSource' name i m =+    samplingCounterResultSource $ computeResultValue name i m++instance {-# OVERLAPPING #-} (MonadDES m,+                              ResultItemable (ResultValue a),+                              ResultItemable (ResultValue (SamplingStats a)))+                             => ResultProvider (Ref m (SamplingCounter a)) m where++  resultSource' name i m =+    samplingCounterResultSource $ computeResultValue name i m++instance {-# OVERLAPPING #-} (MonadDES m,+                              ResultItemable (ResultValue a),+                              ResultItemable (ResultValue (SamplingStats a)))+                             => ResultProvider (B.Ref m (SamplingCounter a)) m where++  resultSource' name i m =+    samplingCounterResultSource $ computeResultValue name i m++instance {-# OVERLAPPING #-} (MonadDES m,+                              MonadVar m,+                              ResultItemable (ResultValue a),+                              ResultItemable (ResultValue (SamplingStats a)))+                             => ResultProvider (Var m (SamplingCounter a)) m where++  resultSource' name i m =+    samplingCounterResultSource $ computeResultValue name i m++instance {-# OVERLAPPING #-} (MonadDES m,+                              ResultItemable (ResultValue a),+                              ResultItemable (ResultValue (SamplingStats a)))+                             => ResultProvider (Signalable m (SamplingCounter a)) m where++  resultSource' name i m =+    samplingCounterResultSource $ computeResultValue name i m++instance {-# OVERLAPPING #-} (MonadDES m,+                              ResultItemable (ResultValue a),+                              ResultItemable (ResultValue (TimingStats a)))+                             => ResultProvider (Parameter m (TimingCounter a)) m where++  resultSource' name i m =     timingCounterResultSource $ computeResultValue name i m -instance ResultComputing t m => ResultProvider (t m String) m where+instance {-# OVERLAPPING #-} (MonadDES m,+                              ResultItemable (ResultValue a),+                              ResultItemable (ResultValue (TimingStats a)))+                             => ResultProvider (Simulation m (TimingCounter a)) m where    resultSource' name i m =-    ResultItemSource $ ResultItem $ computeResultValue name i m+    timingCounterResultSource $ computeResultValue name i m +instance {-# OVERLAPPING #-} (MonadDES m,+                              ResultItemable (ResultValue a),+                              ResultItemable (ResultValue (TimingStats a)))+                             => ResultProvider (Dynamics m (TimingCounter a)) m where++  resultSource' name i m =+    timingCounterResultSource $ computeResultValue name i m++instance {-# OVERLAPPING #-} (MonadDES m,+                              ResultItemable (ResultValue a),+                              ResultItemable (ResultValue (TimingStats a)))+                             => ResultProvider (Event m (TimingCounter a)) m where++  resultSource' name i m =+    timingCounterResultSource $ computeResultValue name i m++instance {-# OVERLAPPING #-} (MonadDES m,+                              ResultItemable (ResultValue a),+                              ResultItemable (ResultValue (TimingStats a)))+                             => ResultProvider (Ref m (TimingCounter a)) m where++  resultSource' name i m =+    timingCounterResultSource $ computeResultValue name i m++instance {-# OVERLAPPING #-} (MonadDES m,+                              ResultItemable (ResultValue a),+                              ResultItemable (ResultValue (TimingStats a)))+                             => ResultProvider (B.Ref m (TimingCounter a)) m where++  resultSource' name i m =+    timingCounterResultSource $ computeResultValue name i m++instance {-# OVERLAPPING #-} (MonadDES m,+                              MonadVar m,+                              ResultItemable (ResultValue a),+                              ResultItemable (ResultValue (TimingStats a)))+                             => ResultProvider (Var m (TimingCounter a)) m where++  resultSource' name i m =+    timingCounterResultSource $ computeResultValue name i m++instance {-# OVERLAPPING #-} (MonadDES m,+                              ResultItemable (ResultValue a),+                              ResultItemable (ResultValue (TimingStats a)))+                             => ResultProvider (Signalable m (TimingCounter a)) m where++  resultSource' name i m =+    timingCounterResultSource $ computeResultValue name i m+ instance ResultProvider p m => ResultProvider [p] m where    resultSource' name i m =@@ -2037,22 +2142,82 @@         in resultSource' name' (VectorItemId y) x       items' = V.map resultSourceSummary items -instance (Ix i, Show i, ResultComputing t m) => ResultProvider (t m (A.Array i Double)) m where+instance {-# OVERLAPPING #-} (Ix i, Show i, MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Parameter m (A.Array i e)) m where    resultSource' name i m =     ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name i m -instance (Ix i, Show i, ResultComputing t m) => ResultProvider (t m (A.Array i Int)) m where+instance {-# OVERLAPPING #-} (Ix i, Show i, MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Simulation m (A.Array i e)) m where    resultSource' name i m =     ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name i m -instance ResultComputing t m => ResultProvider (t m (V.Vector Double)) m where+instance {-# OVERLAPPING #-} (Ix i, Show i, MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Dynamics m (A.Array i e)) m where    resultSource' name i m =+    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name i m++instance {-# OVERLAPPING #-} (Ix i, Show i, MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Event m (A.Array i e)) m where++  resultSource' name i m =+    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name i m++instance {-# OVERLAPPING #-} (Ix i, Show i, MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Ref m (A.Array i e)) m where++  resultSource' name i m =+    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name i m++instance {-# OVERLAPPING #-} (Ix i, Show i, MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (B.Ref m (A.Array i e)) m where++  resultSource' name i m =+    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name i m++instance {-# OVERLAPPING #-} (Ix i, Show i, MonadDES m, MonadVar m, ResultItemable (ResultValue [e])) => ResultProvider (Var m (A.Array i e)) m where++  resultSource' name i m =+    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name i m++instance {-# OVERLAPPING #-} (Ix i, Show i, MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Signalable m (A.Array i e)) m where++  resultSource' name i m =+    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name i m++instance {-# OVERLAPPING #-} (MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Parameter m (V.Vector e)) m where++  resultSource' name i m =     ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name i m -instance ResultComputing t m => ResultProvider (t m (V.Vector Int)) m where+instance {-# OVERLAPPING #-} (MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Simulation m (V.Vector e)) m where++  resultSource' name i m =+    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name i m++instance {-# OVERLAPPING #-} (MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Dynamics m (V.Vector e)) m where++  resultSource' name i m =+    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name i m++instance {-# OVERLAPPING #-} (MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Event m (V.Vector e)) m where++  resultSource' name i m =+    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name i m++instance {-# OVERLAPPING #-} (MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Ref m (V.Vector e)) m where++  resultSource' name i m =+    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name i m++instance {-# OVERLAPPING #-} (MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (B.Ref m (V.Vector e)) m where++  resultSource' name i m =+    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name i m++instance {-# OVERLAPPING #-} (MonadDES m, MonadVar m, ResultItemable (ResultValue [e])) => ResultProvider (Var m (V.Vector e)) m where++  resultSource' name i m =+    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name i m++instance {-# OVERLAPPING #-} (MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Signalable m (V.Vector e)) m where    resultSource' name i m =     ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name i m
Simulation/Aivika/Trans/Results/IO.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Results.IO--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Results/Locale.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Results.Locale--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
+ Simulation/Aivika/Trans/Results/Transform.hs view
@@ -0,0 +1,656 @@++{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}++-- |+-- Module     : Simulation.Aivika.Trans.Results.Transform+-- 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 useful result transformations that can+-- be used in simulation experiments.+--+module Simulation.Aivika.Trans.Results.Transform+       (-- * Basic Class Type+        ResultTransformer(..),+        -- * Sampling Statistics+        SamplingStats(..),+        samplingStatsCount,+        samplingStatsMin,+        samplingStatsMax,+        samplingStatsMean,+        samplingStatsMean2,+        samplingStatsVariance,+        samplingStatsDeviation,+        -- * Time-dependent Statistics+        TimingStats(..),+        timingStatsCount,+        timingStatsMin,+        timingStatsMax,+        timingStatsMean,+        timingStatsVariance,+        timingStatsDeviation,+        timingStatsMinTime,+        timingStatsMaxTime,+        timingStatsStartTime,+        timingStatsLastTime,+        timingStatsSum,+        timingStatsSum2,+        -- * Sampling-based Counter+        SamplingCounter(..),+        samplingCounterValue,+        samplingCounterStats,+        -- * Time-dependent Counter+        TimingCounter(..),+        timingCounterValue,+        timingCounterStats,+        -- * Queue+        Queue(..),+        enqueueStrategy,+        enqueueStoringStrategy,+        dequeueStrategy,+        queueNull,+        queueFull,+        queueMaxCount,+        queueCount,+        queueCountStats,+        enqueueCount,+        enqueueLostCount,+        enqueueStoreCount,+        dequeueCount,+        dequeueExtractCount,+        queueLoadFactor,+        enqueueRate,+        enqueueStoreRate,+        dequeueRate,+        dequeueExtractRate,+        queueWaitTime,+        queueTotalWaitTime,+        enqueueWaitTime,+        dequeueWaitTime,+        queueRate,+        -- * Arrival Timer+        ArrivalTimer(..),+        arrivalProcessingTime,+        -- * Server+        Server(..),+        serverInitState,+        serverState,+        serverTotalInputWaitTime,+        serverTotalProcessingTime,+        serverTotalOutputWaitTime,+        serverTotalPreemptionTime,+        serverInputWaitTime,+        serverProcessingTime,+        serverOutputWaitTime,+        serverPreemptionTime,+        serverInputWaitFactor,+        serverProcessingFactor,+        serverOutputWaitFactor,+        serverPreemptionFactor,+        -- * Activity+        Activity(..),+        activityInitState,+        activityState,+        activityTotalUtilisationTime,+        activityTotalIdleTime,+        activityTotalPreemptionTime,+        activityUtilisationTime,+        activityIdleTime,+        activityPreemptionTime,+        activityUtilisationFactor,+        activityIdleFactor,+        activityPreemptionFactor,+        -- * Resource+        Resource(..),+        resourceCount,+        resourceCountStats,+        resourceUtilisationCount,+        resourceUtilisationCountStats,+        resourceQueueCount,+        resourceQueueCountStats,+        resourceTotalWaitTime,+        resourceWaitTime,+        -- * Operation+        Operation(..),+        operationTotalUtilisationTime,+        operationTotalPreemptionTime,+        operationUtilisationTime,+        operationPreemptionTime,+        operationUtilisationFactor,+        operationPreemptionFactor) where++import Control.Arrow++import Simulation.Aivika.Trans.DES+import Simulation.Aivika.Trans.Results+import Simulation.Aivika.Trans.Results.Locale++-- | Something that can transform the results.+class ResultTransformer t m where++  -- | Return the result transform.+  tr :: t m -> ResultTransform m++-- | Represents a statistics based upon observations.+newtype SamplingStats m = SamplingStats (ResultTransform m)++instance ResultTransformer SamplingStats m where+  tr (SamplingStats a) = a++-- | The total number of samples.+samplingStatsCount :: MonadDES m => SamplingStats m -> ResultTransform m+samplingStatsCount (SamplingStats a) =+  a >>> expandResults >>> resultById SamplingStatsCountId++-- | The minimum value among the samples.+samplingStatsMin :: MonadDES m => SamplingStats m -> ResultTransform m+samplingStatsMin (SamplingStats a) =+  a >>> expandResults >>> resultById SamplingStatsMinId++-- | The maximum value among the samples.+samplingStatsMax :: MonadDES m => SamplingStats m -> ResultTransform m+samplingStatsMax (SamplingStats a) =+  a >>> expandResults >>> resultById SamplingStatsMaxId+  +-- | The average value.+samplingStatsMean :: MonadDES m => SamplingStats m -> ResultTransform m+samplingStatsMean (SamplingStats a) =+  a >>> expandResults >>> resultById SamplingStatsMeanId++-- | The average square value.+samplingStatsMean2 :: MonadDES m => SamplingStats m -> ResultTransform m+samplingStatsMean2 (SamplingStats a) =+  a >>> expandResults >>> resultById SamplingStatsMean2Id++-- | Return tha variance.+samplingStatsVariance :: MonadDES m => SamplingStats m -> ResultTransform m+samplingStatsVariance (SamplingStats a) =+  a >>> expandResults >>> resultById SamplingStatsVarianceId++-- | Return the deviation.+samplingStatsDeviation :: MonadDES m => SamplingStats m -> ResultTransform m+samplingStatsDeviation (SamplingStats a) =+  a >>> expandResults >>> resultById SamplingStatsDeviationId++-- | A counter for which the statistics is collected too.+newtype SamplingCounter m = SamplingCounter (ResultTransform m)++instance ResultTransformer SamplingCounter m where+  tr (SamplingCounter a) = a++-- | The counter value.+samplingCounterValue :: SamplingCounter m -> ResultTransform m+samplingCounterValue (SamplingCounter a) =+  a >>> resultById SamplingCounterValueId++-- | The counter statistics.+samplingCounterStats :: SamplingCounter m -> SamplingStats m+samplingCounterStats (SamplingCounter a) =+  SamplingStats (a >>> resultById SamplingCounterStatsId)++-- | The time-dependent statistics.+newtype TimingStats m = TimingStats (ResultTransform m)++instance ResultTransformer TimingStats m where+  tr (TimingStats a) = a++-- | Return the number of samples.+timingStatsCount :: MonadDES m => TimingStats m -> ResultTransform m+timingStatsCount (TimingStats a) =+  a >>> expandResults >>> resultById TimingStatsCountId++-- | Return the minimum value.+timingStatsMin :: MonadDES m => TimingStats m -> ResultTransform m+timingStatsMin (TimingStats a) =+  a >>> expandResults >>> resultById TimingStatsMinId++-- | Return the maximum value.+timingStatsMax :: MonadDES m => TimingStats m -> ResultTransform m+timingStatsMax (TimingStats a) =+  a >>> expandResults >>> resultById TimingStatsMaxId++-- | Return the average value.+timingStatsMean :: MonadDES m => TimingStats m -> ResultTransform m+timingStatsMean (TimingStats a) =+  a >>> expandResults >>> resultById TimingStatsMeanId++-- | Return the variance.+timingStatsVariance :: MonadDES m => TimingStats m -> ResultTransform m+timingStatsVariance (TimingStats a) =+  a >>> expandResults >>> resultById TimingStatsVarianceId++-- | Return the deviation.+timingStatsDeviation :: MonadDES m => TimingStats m -> ResultTransform m+timingStatsDeviation (TimingStats a) =+  a >>> expandResults >>> resultById TimingStatsDeviationId++-- | Return the time at which the minimum is attained.+timingStatsMinTime :: MonadDES m => TimingStats m -> ResultTransform m+timingStatsMinTime (TimingStats a) =+  a >>> expandResults >>> resultById TimingStatsMinTimeId++-- | Return the time at which the maximum is attained.+timingStatsMaxTime :: MonadDES m => TimingStats m -> ResultTransform m+timingStatsMaxTime (TimingStats a) =+  a >>> expandResults >>> resultById TimingStatsMaxTimeId++-- | Return the start time of sampling.+timingStatsStartTime :: MonadDES m => TimingStats m -> ResultTransform m+timingStatsStartTime (TimingStats a) =+  a >>> expandResults >>> resultById TimingStatsStartTimeId++-- | Return the last time of sampling.+timingStatsLastTime :: MonadDES m => TimingStats m -> ResultTransform m+timingStatsLastTime (TimingStats a) =+  a >>> expandResults >>> resultById TimingStatsLastTimeId++-- | Return the sum of values.+timingStatsSum :: MonadDES m => TimingStats m -> ResultTransform m+timingStatsSum (TimingStats a) =+  a >>> expandResults >>> resultById TimingStatsSumId++-- | Return the sum of square values.+timingStatsSum2 :: MonadDES m => TimingStats m -> ResultTransform m+timingStatsSum2 (TimingStats a) =+  a >>> expandResults >>> resultById TimingStatsSum2Id++-- | A time-dependent counter that collects the statistics too.+newtype TimingCounter m = TimingCounter (ResultTransform m)++instance ResultTransformer TimingCounter m where+  tr (TimingCounter a) = a++-- | The counter value.+timingCounterValue :: TimingCounter m -> ResultTransform m+timingCounterValue (TimingCounter a) =+  a >>> resultById TimingCounterValueId++-- | The counter statistics.+timingCounterStats :: TimingCounter m -> TimingStats m+timingCounterStats (TimingCounter a) =+  TimingStats (a >>> resultById TimingCounterStatsId)++-- | Represents either finite or infinite queue.+newtype Queue m = Queue (ResultTransform m)++instance ResultTransformer Queue m where+  tr (Queue a) = a++-- | The strategy applied to the enqueueing (input) processes when the finite queue is full.+enqueueStrategy :: Queue m -> ResultTransform m+enqueueStrategy (Queue a) =+  a >>> resultById EnqueueStrategyId++-- | The strategy applied when storing (in memory) items in the queue.+enqueueStoringStrategy :: Queue m -> ResultTransform m+enqueueStoringStrategy (Queue a) =+  a >>> resultById EnqueueStoringStrategyId++-- | The strategy applied to the dequeueing (output) processes when the queue is empty.+dequeueStrategy :: Queue m -> ResultTransform m+dequeueStrategy (Queue a) =+  a >>> resultById DequeueStrategyId++-- | Test whether the queue is empty.+queueNull :: Queue m -> ResultTransform m+queueNull (Queue a) =+  a >>> resultById QueueNullId++-- | Test whether the finite queue is full.+queueFull :: Queue m -> ResultTransform m+queueFull (Queue a) =+  a >>> resultById QueueFullId++-- | The finite queue capacity.+queueMaxCount :: Queue m -> ResultTransform m+queueMaxCount (Queue a) =+  a >>> resultById QueueMaxCountId++-- | Return the current queue size.+queueCount :: Queue m -> ResultTransform m+queueCount (Queue a) =+  a >>> resultById QueueCountId++-- | Return the queue size statistics.+queueCountStats :: Queue m -> TimingStats m+queueCountStats (Queue a) =+  TimingStats (a >>> resultById QueueCountStatsId)++-- | Return the total number of input items that were enqueued in the finite queue.+enqueueCount :: Queue m -> ResultTransform m+enqueueCount (Queue a) =+  a >>> resultById EnqueueCountId++-- | Return the number of lost items for the finite queue.+enqueueLostCount :: Queue m -> ResultTransform m+enqueueLostCount (Queue a) =+  a >>> resultById EnqueueLostCountId++-- | Return the total number of input items that were stored.+enqueueStoreCount :: Queue m -> ResultTransform m+enqueueStoreCount (Queue a) =+  a >>> resultById EnqueueStoreCountId++-- | Return the total number of requests for dequeueing the items, not taking+-- into account the failed attempts to dequeue immediately without suspension.+dequeueCount :: Queue m -> ResultTransform m+dequeueCount (Queue a) =+  a >>> resultById DequeueCountId++-- | Return the total number of output items that were actually dequeued.+dequeueExtractCount :: Queue m -> ResultTransform m+dequeueExtractCount (Queue a) =+  a >>> resultById DequeueExtractCountId++-- | Return the load factor: the finite queue size divided by its capacity.+queueLoadFactor :: Queue m -> ResultTransform m+queueLoadFactor (Queue a) =+  a >>> resultById QueueLoadFactorId++-- | Return the rate of the input items that were enqueued in the finite queue:+-- how many items per time.+enqueueRate :: Queue m -> ResultTransform m+enqueueRate (Queue a) =+  a >>> resultById EnqueueRateId++-- | Return the rate of the items that were stored: how many items per time.+enqueueStoreRate :: Queue m -> ResultTransform m+enqueueStoreRate (Queue a) =+  a >>> resultById EnqueueStoreRateId++-- | Return the rate of the requests for dequeueing the items: how many+-- requests per time. It does not include the failed attempts to dequeue+-- immediately without suspension.+dequeueRate :: Queue m -> ResultTransform m+dequeueRate (Queue a) =+  a >>> resultById DequeueRateId++-- | Return the rate of the output items that were dequeued: how many items per time.+dequeueExtractRate :: Queue m -> ResultTransform m+dequeueExtractRate (Queue a) =+  a >>> resultById DequeueExtractRateId++-- | Return the wait time from the time at which the item was stored in+-- the queue to the time at which it was dequeued.+queueWaitTime :: Queue m -> SamplingStats m+queueWaitTime (Queue a) =+  SamplingStats (a >>> resultById QueueWaitTimeId)++-- | Return the total wait time for the finite queue from the time at which+-- the enqueueing operation was initiated to the time at which the item was dequeued.+queueTotalWaitTime :: Queue m -> SamplingStats m+queueTotalWaitTime (Queue a) =+  SamplingStats (a >>> resultById QueueTotalWaitTimeId)++-- | Return the wait time from the time at which the item was stored in+-- the queue to the time at which it was dequeued.+enqueueWaitTime :: Queue m -> SamplingStats m+enqueueWaitTime (Queue a) =+  SamplingStats (a >>> resultById EnqueueWaitTimeId)++-- | Return the dequeue wait time from the time at which the item was requested+-- for dequeueing to the time at which it was actually dequeued.+dequeueWaitTime :: Queue m -> SamplingStats m+dequeueWaitTime (Queue a) =+  SamplingStats (a >>> resultById DequeueWaitTimeId)++-- | Return a long-term average queue rate calculated as the average queue size+-- divided by the average wait time.+queueRate :: Queue m -> ResultTransform m+queueRate (Queue a) =+  a >>> resultById QueueRateId++-- | Accumulates the statistics about that how long the arrived events are processed.+newtype ArrivalTimer m = ArrivalTimer (ResultTransform m)++instance ResultTransformer ArrivalTimer m where+  tr (ArrivalTimer a) = a++-- | Return the statistics about that how long the arrived events were processed.+arrivalProcessingTime :: ArrivalTimer m -> SamplingStats m+arrivalProcessingTime (ArrivalTimer a) =+  SamplingStats (a >>> resultById ArrivalProcessingTimeId)++-- | It models the server that prodives a service.+newtype Server m = Server (ResultTransform m)++instance ResultTransformer Server m where+  tr (Server a) = a++-- | The initial state of the server.+serverInitState :: Server m -> ResultTransform m+serverInitState (Server a) =+  a >>> resultById ServerInitStateId++-- | Return the current state of the server.+serverState :: Server m -> ResultTransform m+serverState (Server a) =+  a >>> resultById ServerStateId++-- | Return the counted total time when the server was locked while+-- awaiting the input.+serverTotalInputWaitTime :: Server m -> ResultTransform m+serverTotalInputWaitTime (Server a) =+  a >>> resultById ServerTotalInputWaitTimeId++-- | Return the counted total time spent by the server while+-- processing the tasks.+serverTotalProcessingTime :: Server m -> ResultTransform m+serverTotalProcessingTime (Server a) =+  a >>> resultById ServerTotalProcessingTimeId++-- | Return the counted total time when the server was locked while+-- trying to deliver the output.+serverTotalOutputWaitTime :: Server m -> ResultTransform m+serverTotalOutputWaitTime (Server a) =+  a >>> resultById ServerTotalOutputWaitTimeId++-- | Return the counted total time spent by the server while it was+-- preempted waiting for the further proceeding.+serverTotalPreemptionTime :: Server m -> ResultTransform m+serverTotalPreemptionTime (Server a) =+  a >>> resultById ServerTotalPreemptionTimeId++-- | Return the statistics of the time when the server was locked+-- while awaiting the input.+serverInputWaitTime :: Server m -> SamplingStats m+serverInputWaitTime (Server a) =+  SamplingStats (a >>> resultById ServerInputWaitTimeId)++-- | Return the statistics of the time spent by the server while+-- processing the tasks.+serverProcessingTime :: Server m -> SamplingStats m+serverProcessingTime (Server a) =+  SamplingStats (a >>> resultById ServerProcessingTimeId)++-- | Return the statistics of the time when the server was locked+-- while trying to deliver the output.+serverOutputWaitTime :: Server m -> SamplingStats m+serverOutputWaitTime (Server a) =+  SamplingStats (a >>> resultById ServerOutputWaitTimeId)++-- | Return the statistics of the time spent by the server while+-- it was preempted waiting for the further proceeding.+serverPreemptionTime :: Server m -> SamplingStats m+serverPreemptionTime (Server a) =+  SamplingStats (a >>> resultById ServerPreemptionTimeId)++-- | It returns the factor changing from 0 to 1, which estimates+-- how often the server was awaiting for the next input task.+serverInputWaitFactor :: Server m -> ResultTransform m+serverInputWaitFactor (Server a) =+  a >>> resultById ServerInputWaitFactorId++-- | It returns the factor changing from 0 to 1, which estimates+-- how often the server was busy with direct processing its tasks.+serverProcessingFactor :: Server m -> ResultTransform m+serverProcessingFactor (Server a) =+  a >>> resultById ServerProcessingFactorId++-- | It returns the factor changing from 0 to 1, which estimates+-- how often the server was locked trying to deliver the output+-- after the task is finished.+serverOutputWaitFactor :: Server m -> ResultTransform m+serverOutputWaitFactor (Server a) =+  a >>> resultById ServerOutputWaitFactorId++-- | It returns the factor changing from 0 to 1, which estimates+-- how often the server was preempted waiting for the further proceeding.+serverPreemptionFactor :: Server m -> ResultTransform m+serverPreemptionFactor (Server a) =+  a >>> resultById ServerPreemptionFactorId++-- | It models an activity that can be utilised.+newtype Activity m = Activity (ResultTransform m)++instance ResultTransformer Activity m where+  tr (Activity a) = a++-- | The initial state of the activity.+activityInitState :: Activity m -> ResultTransform m+activityInitState (Activity a) =+  a >>> resultById ActivityInitStateId++-- | Return the current state of the activity.+activityState :: Activity m -> ResultTransform m+activityState (Activity a) =+  a >>> resultById ActivityStateId++-- | Return the counted total time when the activity was utilised.+activityTotalUtilisationTime :: Activity m -> ResultTransform m+activityTotalUtilisationTime (Activity a) =+  a >>> resultById ActivityTotalUtilisationTimeId++-- | Return the counted total time when the activity was idle.+activityTotalIdleTime :: Activity m -> ResultTransform m+activityTotalIdleTime (Activity a) =+  a >>> resultById ActivityTotalIdleTimeId++-- | Return the counted total time when the activity was preemted+-- waiting for the further proceeding.+activityTotalPreemptionTime :: Activity m -> ResultTransform m+activityTotalPreemptionTime (Activity a) =+  a >>> resultById ActivityTotalPreemptionTimeId++-- | Return the statistics for the time when the activity was utilised.+activityUtilisationTime :: Activity m -> SamplingStats m+activityUtilisationTime (Activity a) =+  SamplingStats (a >>> resultById ActivityUtilisationTimeId)++-- | Return the statistics for the time when the activity was idle.+activityIdleTime :: Activity m -> SamplingStats m+activityIdleTime (Activity a) =+  SamplingStats (a >>> resultById ActivityIdleTimeId)++-- | Return the statistics for the time when the activity was preempted+-- waiting for the further proceeding.+activityPreemptionTime :: Activity m -> SamplingStats m+activityPreemptionTime (Activity a) =+  SamplingStats (a >>> resultById ActivityPreemptionTimeId)++-- | It returns the factor changing from 0 to 1, which estimates how often+-- the activity was utilised.+activityUtilisationFactor :: Activity m -> ResultTransform m+activityUtilisationFactor (Activity a) =+  a >>> resultById ActivityUtilisationFactorId++-- | It returns the factor changing from 0 to 1, which estimates how often+-- the activity was idle.+activityIdleFactor :: Activity m -> ResultTransform m+activityIdleFactor (Activity a) =+  a >>> resultById ActivityIdleFactorId++-- | It returns the factor changing from 0 to 1, which estimates how often+-- the activity was preempted waiting for the further proceeding.+activityPreemptionFactor :: Activity m -> ResultTransform m+activityPreemptionFactor (Activity a) =+  a >>> resultById ActivityPreemptionFactorId++-- | The resource which can be acquired and then released.+newtype Resource m = Resource (ResultTransform m)++instance ResultTransformer Resource m where+  tr (Resource a) = a++-- | Return the current available count of the resource.+resourceCount :: Resource m -> ResultTransform m+resourceCount (Resource a) =+  a >>> resultById ResourceCountId++-- | Return the statistics for the available count of the resource.+resourceCountStats :: Resource m -> TimingStats m+resourceCountStats (Resource a) =+  TimingStats (a >>> resultById ResourceCountStatsId)++-- | Return the current utilisation count of the resource.+resourceUtilisationCount :: Resource m -> ResultTransform m+resourceUtilisationCount (Resource a) =+  a >>> resultById ResourceUtilisationCountId++-- | Return the statistics for the utilisation count of the resource.+resourceUtilisationCountStats :: Resource m -> TimingStats m+resourceUtilisationCountStats (Resource a) =+  TimingStats (a >>> resultById ResourceUtilisationCountStatsId)++-- | Return the current queue length of the resource.+resourceQueueCount :: Resource m -> ResultTransform m+resourceQueueCount (Resource a) =+  a >>> resultById ResourceQueueCountId++-- | Return the statistics for the queue length of the resource.+resourceQueueCountStats :: Resource m -> TimingStats m+resourceQueueCountStats (Resource a) =+  TimingStats (a >>> resultById ResourceQueueCountStatsId)++-- | Return the total wait time of the resource.+resourceTotalWaitTime :: Resource m -> ResultTransform m+resourceTotalWaitTime (Resource a) =+  a >>> resultById ResourceTotalWaitTimeId++-- | Return the statistics for the wait time of the resource.+resourceWaitTime :: Resource m -> SamplingStats m+resourceWaitTime (Resource a) =+  SamplingStats (a >>> resultById ResourceWaitTimeId)++-- | It models an opreation which actvity can be utilised.+newtype Operation m = Operation (ResultTransform m)++instance ResultTransformer Operation m where+  tr (Operation a) = a++-- | Return the counted total time when the operation activity was utilised.+operationTotalUtilisationTime :: Operation m -> ResultTransform m+operationTotalUtilisationTime (Operation a) =+  a >>> resultById OperationTotalUtilisationTimeId++-- | Return the counted total time when the operation activity was preemted+-- waiting for the further proceeding.+operationTotalPreemptionTime :: Operation m -> ResultTransform m+operationTotalPreemptionTime (Operation a) =+  a >>> resultById OperationTotalPreemptionTimeId++-- | Return the statistics for the time when the operation activity was utilised.+operationUtilisationTime :: Operation m -> SamplingStats m+operationUtilisationTime (Operation a) =+  SamplingStats (a >>> resultById OperationUtilisationTimeId)++-- | Return the statistics for the time when the operation activity was preempted+-- waiting for the further proceeding.+operationPreemptionTime :: Operation m -> SamplingStats m+operationPreemptionTime (Operation a) =+  SamplingStats (a >>> resultById OperationPreemptionTimeId)++-- | It returns the factor changing from 0 to 1, which estimates how often+-- the operation activity was utilised.+operationUtilisationFactor :: Operation m -> ResultTransform m+operationUtilisationFactor (Operation a) =+  a >>> resultById OperationUtilisationFactorId++-- | It returns the factor changing from 0 to 1, which estimates how often+-- the operation activity was preempted waiting for the further proceeding.+operationPreemptionFactor :: Operation m -> ResultTransform m+operationPreemptionFactor (Operation a) =+  a >>> resultById OperationPreemptionFactorId
Simulation/Aivika/Trans/SD.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.SD--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Server.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Server--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -32,6 +32,8 @@         serverProcessingFactor,         serverOutputWaitFactor,         serverPreemptionFactor,+        -- * Statistics Reset+        resetServer,         -- * Summary         serverSummary,         -- * Derived Signals for Properties@@ -761,3 +763,16 @@        showString tab .        showString "preemption time (waiting for the proceeding after preemption):\n\n" .        samplingStatsSummary xs4 (2 + indent)++-- | Reset the statistics.+resetServer :: MonadDES m => Server m s a b -> Event m ()+{-# INLINABLE resetServer #-}+resetServer server =+  do writeRef (serverTotalInputWaitTimeRef server) 0+     writeRef (serverTotalProcessingTimeRef server) 0+     writeRef (serverTotalOutputWaitTimeRef server) 0+     writeRef (serverTotalPreemptionTimeRef server) 0+     writeRef (serverInputWaitTimeRef server) mempty+     writeRef (serverProcessingTimeRef server) mempty+     writeRef (serverOutputWaitTimeRef server) mempty+     writeRef (serverPreemptionTimeRef server) mempty
Simulation/Aivika/Trans/Server/Random.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Server.Random--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Signal.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Signal--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental@@ -17,6 +17,7 @@        (-- * Handling and Triggering Signal         Signal(..),         handleSignal_,+        handleSignalComposite,         SignalSource,         newSignalSource,         newSignalSource0,@@ -40,6 +41,12 @@         -- * Delaying Signal         delaySignal,         delaySignalM,+        -- * Signal History+        SignalHistory,+        signalHistorySignal,+        newSignalHistory,+        newSignalHistoryStartingWith,+        readSignalHistory,         -- * Creating Signal in Time Points         newSignalInTimes,         newSignalInIntegTimes,@@ -56,7 +63,6 @@ import Data.Monoid import Data.List import Data.Array-import Data.Array.MArray.Safe  import Control.Monad import Control.Monad.Trans@@ -66,7 +72,9 @@ import Simulation.Aivika.Trans.Internal.Specs import Simulation.Aivika.Trans.Internal.Parameter import Simulation.Aivika.Trans.Internal.Simulation+import Simulation.Aivika.Trans.Internal.Dynamics import Simulation.Aivika.Trans.Internal.Event+import Simulation.Aivika.Trans.Composite import Simulation.Aivika.Arrival (Arrival(..))  -- | The signal source that can publish its signal.@@ -109,6 +117,13 @@ handleSignal_ signal h =    do x <- handleSignal signal h      return ()++-- | Like 'handleSignal' but within the 'Composite' computation.+handleSignalComposite :: MonadDES m => Signal m a -> (a -> Event m ()) -> Composite m ()+{-# INLINABLE handleSignalComposite #-}+handleSignalComposite signal h =+  do x <- liftEvent $ handleSignal signal h+     disposableComposite x       -- | Create a new signal source. newSignalSource :: MonadDES m => Simulation m (SignalSource m a)@@ -307,7 +322,53 @@ {-# INLINABLE emptySignal #-} emptySignal =   Signal { handleSignal = \h -> return mempty }-     ++-- | Represents the history of the signal values.+data SignalHistory m a =+  SignalHistory { signalHistorySignal :: Signal m a,  +                  -- ^ The signal for which the history is created.+                  signalHistoryTimes  :: Ref m [Double],+                  signalHistoryValues :: Ref m [a] }++-- | Create a history of the signal values.+newSignalHistory :: MonadDES m => Signal m a -> Composite m (SignalHistory m a)+{-# INLINABLE newSignalHistory #-}+newSignalHistory =+  newSignalHistoryStartingWith Nothing++-- | Create a history of the signal values starting with+-- the optional initial value.+newSignalHistoryStartingWith :: MonadDES m => Maybe a -> Signal m a -> Composite m (SignalHistory m a)+{-# INLINABLE newSignalHistoryStartingWith #-}+newSignalHistoryStartingWith init signal =+  do ts <- liftSimulation $ newRef []+     xs <- liftSimulation $ newRef []+     case init of+       Nothing -> return ()+       Just a ->+         liftEvent $+         do t <- liftDynamics time+            modifyRef ts (t :)+            modifyRef xs (a :)+     handleSignalComposite signal $ \a ->+       do t <- liftDynamics time+          modifyRef ts (t :)+          modifyRef xs (a :)+     return SignalHistory { signalHistorySignal = signal,+                            signalHistoryTimes  = ts,+                            signalHistoryValues = xs }+       +-- | Read the history of signal values.+readSignalHistory :: MonadDES m => SignalHistory m a -> Event m (Array Int Double, Array Int a)+{-# INLINABLE readSignalHistory #-}+readSignalHistory history =+  do xs0 <- readRef (signalHistoryTimes history)+     ys0 <- readRef (signalHistoryValues history)+     let n  = length xs0+         xs = listArray (0, n - 1) (reverse xs0)+         ys = listArray (0, n - 1) (reverse ys0)+     return (xs, ys)     + -- | Trigger the signal with the current time. triggerSignalWithCurrentTime :: MonadDES m => SignalSource m Double -> Event m () {-# INLINABLE triggerSignalWithCurrentTime #-}
Simulation/Aivika/Trans/Signal/Random.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Signal.Random--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Simulation.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Simulation--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Specs.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Specs--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Statistics.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Statistics--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Statistics/Accumulator.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Statistics.Accumulator--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Stream.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Stream--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Stream/Random.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Stream.Random--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/SystemDynamics.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.SystemDynamics--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Table.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Table--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Task.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Task--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Transform.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Transform--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Transform/Extra.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Transform.Extra--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Transform/Memo.hs view
@@ -1,7 +1,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Transform.Memo--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Transform/Memo/Unboxed.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Transform.Memo.Unboxed--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Var.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Var--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
Simulation/Aivika/Trans/Var/Unboxed.hs view
@@ -3,7 +3,7 @@  -- | -- Module     : Simulation.Aivika.Trans.Var.Unboxed--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com> -- License    : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability  : experimental
+ Simulation/Aivika/Trans/Vector.hs view
@@ -0,0 +1,299 @@++{-# LANGUAGE FlexibleContexts #-}++-- |+-- Module     : Simulation.Aivika.Trans.Vector+-- 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+--+-- An imperative vector.+--+module Simulation.Aivika.Trans.Vector+       (Vector, +        newVector, +        copyVector,+        vectorCount, +        appendVector, +        readVector, +        writeVector,+        vectorBinarySearch,+        vectorInsert,+        vectorDeleteAt,+        vectorDeleteRange,+        vectorDelete,+        vectorDeleteBy,+        vectorIndex,+        vectorIndexBy,+        vectorContains,+        vectorContainsBy,+        freezeVector) where ++import Data.Array++import Control.Monad++import Simulation.Aivika.Trans.Simulation+import Simulation.Aivika.Trans.Event+import Simulation.Aivika.Trans.Ref.Base.Lazy++-- | Represents a resizable vector.+data Vector m a = Vector { vectorArrayRef :: Ref m (Array Int (Ref m a)),+                           vectorCountRef :: Ref m Int, +                           vectorCapacityRef :: Ref m Int }++-- | Create a new vector.+newVector :: MonadRef m => Simulation m (Vector m a)+{-# INLINABLE newVector #-}+newVector =+  do xs <- forM [0 .. 4 - 1] $ \i -> newRef undefined+     let arr = array (0, 4 - 1) $ zip [0..] xs+     arrRef   <- newRef $! arr+     countRef <- newRef $! 0+     capacityRef <- newRef $! 4+     return Vector { vectorArrayRef = arrRef,+                     vectorCountRef = countRef,+                     vectorCapacityRef = capacityRef }++-- | Copy the vector.+copyVector :: MonadRef m => Vector m a -> Event m (Vector m a)+{-# INLINABLE copyVector #-}+copyVector vector =+  do arr   <- readRef (vectorArrayRef vector)+     count <- readRef (vectorCountRef vector)+     xs' <-+       forM [0 .. count - 1] $ \i ->+       do x <- readRef (arr ! i)+          liftSimulation $ newRef x+     let arr' = array (0, count - 1) $ zip [0..] xs'+     arrRef'   <- liftSimulation $ newRef $! arr'+     countRef' <- liftSimulation $ newRef $! count+     capacityRef' <- liftSimulation $ newRef $! count+     return Vector { vectorArrayRef = arrRef',+                     vectorCountRef = countRef',+                     vectorCapacityRef = capacityRef' }++-- | Ensure that the vector has the specified capacity.+vectorEnsureCapacity :: MonadRef m => Vector m a -> Int -> Event m ()+{-# INLINABLE vectorEnsureCapacity #-}+vectorEnsureCapacity vector capacity =+  do capacity' <- readRef (vectorCapacityRef vector)+     when (capacity' < capacity) $+       do arr'   <- readRef (vectorArrayRef vector)+          count' <- readRef (vectorCountRef vector)+          let capacity'' = max (2 * capacity') capacity+          xs'' <-+            forM [0 .. capacity'' - 1] $ \i ->+            liftSimulation $ newRef undefined+          let arr'' = array (0, capacity'' - 1) $ zip [0..] xs''+          forM_ [0 .. count' - 1] $ \i ->+            do x <- readRef (arr' ! i)+               writeRef (arr'' ! i) x+          writeRef (vectorArrayRef vector) $! arr''+          writeRef (vectorCapacityRef vector) $! capacity''+          +-- | Return the element count.+vectorCount :: MonadRef m => Vector m a -> Event m Int+{-# INLINABLE vectorCount #-}+vectorCount vector = readRef (vectorCountRef vector)+          +-- | Add the specified element to the end of the vector.+appendVector :: MonadRef m => Vector m a -> a -> Event m ()          +{-# INLINABLE appendVector #-}+appendVector vector item =+  do count <- readRef (vectorCountRef vector)+     vectorEnsureCapacity vector (count + 1)+     arr   <- readRef (vectorArrayRef vector)+     writeRef (arr ! count) $! item+     writeRef (vectorCountRef vector) $! (count + 1)+     +-- | Read a value from the vector, where indices are started from 0.+readVector :: MonadRef m => Vector m a -> Int -> Event m a+{-# INLINABLE readVector #-}+readVector vector index =+  do arr <- readRef (vectorArrayRef vector)+     readRef (arr ! index)+          +-- | Set an array item at the specified index which is started from 0.+writeVector :: MonadRef m => Vector m a -> Int -> a -> Event m ()+{-# INLINABLE writeVector #-}+writeVector vector index item =+  do arr <- readRef (vectorArrayRef vector)+     writeRef (arr ! index) $! item++vectorBinarySearch' :: (MonadRef m, Ord a) => Array Int (Ref m a) -> a -> Int -> Int -> Event m Int+{-# INLINABLE vectorBinarySearch' #-}+vectorBinarySearch' arr item left right =+  if left > right +  then return $ - (right + 1) - 1+  else+    do let index = (left + right) `div` 2+       curr <- readRef (arr ! index)+       if item < curr +         then vectorBinarySearch' arr item left (index - 1)+         else if item == curr+              then return index+              else vectorBinarySearch' arr item (index + 1) right+                   +-- | Return the index of the specified element using binary search; otherwise, +-- a negated insertion index minus one: 0 -> -0 - 1, ..., i -> -i - 1, ....+vectorBinarySearch :: (MonadRef m, Ord a) => Vector m a -> a -> Event m Int+{-# INLINABLE vectorBinarySearch #-}+vectorBinarySearch vector item =+  do arr   <- readRef (vectorArrayRef vector)+     count <- readRef (vectorCountRef vector)+     vectorBinarySearch' arr item 0 (count - 1)++-- | Return the elements of the vector in an immutable array.+freezeVector :: MonadRef m => Vector m a -> Event m (Array Int a)+{-# INLINABLE freezeVector #-}+freezeVector vector = +  do arr   <- readRef (vectorArrayRef vector)+     count <- readRef (vectorCountRef vector)+     xs' <-+       forM [0 .. count - 1] $ \i ->+       readRef (arr ! i)+     let arr' = array (0, count - 1) $ zip [0..] xs'+     return arr'+     +-- | Insert the element in the vector at the specified index.+vectorInsert :: MonadRef m => Vector m a -> Int -> a -> Event m ()          +{-# INLINABLE vectorInsert #-}+vectorInsert vector index item =+  do count <- readRef (vectorCountRef vector)+     when (index < 0) $+       error $+       "Index cannot be " +++       "negative: vectorInsert."+     when (index > count) $+       error $+       "Index cannot be greater " +++       "than the count: vectorInsert."+     vectorEnsureCapacity vector (count + 1)+     arr <- readRef (vectorArrayRef vector)+     forM_ [count, count - 1 .. index + 1] $ \i ->+       do x <- readRef (arr ! (i - 1))+          writeRef (arr ! i) x+     writeRef (arr ! index) $! item+     writeRef (vectorCountRef vector) $! (count + 1)+     +-- | Delete the element at the specified index.+vectorDeleteAt :: MonadRef m => Vector m a -> Int -> Event m ()+{-# INLINABLE vectorDeleteAt #-}+vectorDeleteAt vector index =+  do count <- readRef (vectorCountRef vector)+     when (index < 0) $+       error $+       "Index cannot be " +++       "negative: vectorDeleteAt."+     when (index >= count) $+       error $+       "Index must be less " +++       "than the count: vectorDeleteAt."+     arr <- readRef (vectorArrayRef vector)+     forM_ [index, index + 1 .. count - 2] $ \i ->+       do x <- readRef (arr ! (i + 1))+          writeRef (arr ! i) x+     writeRef (arr ! (count - 1)) undefined+     writeRef (vectorCountRef vector) $! (count - 1)++-- | Delete the specified range of elements.+vectorDeleteRange :: MonadRef m+                     => Vector m a+                     -- ^ the vector+                     -> Int+                     -- ^ the start index+                     -> Int+                     -- ^ the count of items to be removed+                     -> Event m ()+{-# INLINABLE vectorDeleteRange #-}+vectorDeleteRange vector index len =+  do count <- readRef (vectorCountRef vector)+     when (index < 0) $+       error $+       "The first index cannot be " +++       "negative: vectorDeleteRange."+     when (index + len - 1 >= count) $+       error $+       "The last index must be less " +++       "than the count: vectorDeleteRange."+     when (len < 0) $+       error "Negative range length: vectorDeleteRange." +     arr <- readRef (vectorArrayRef vector)+     forM_ [index, index + 1 .. (count - len) - 1] $ \i ->+       do x <- readRef (arr ! (i + len))+          writeRef (arr ! i) x+     forM_ [(count - len) .. count - 1] $ \i ->+       writeRef (arr ! i) undefined+     writeRef (vectorCountRef vector) $! (count - len)+     +-- | Return the index of the item or -1.     +vectorIndex :: (MonadRef m, Eq a) => Vector m a -> a -> Event m Int+{-# INLINABLE vectorIndex #-}+vectorIndex vector item =+  do count <- readRef (vectorCountRef vector)+     arr   <- readRef (vectorArrayRef vector)+     let loop index =+           if index >= count+           then return $ -1+           else do x <- readRef (arr ! index)+                   if item == x+                     then return index+                     else loop $ index + 1+     loop 0+     +-- | Return an index of the item satisfying the predicate or -1.     +vectorIndexBy :: MonadRef m => Vector m a -> (a -> Bool) -> Event m Int+{-# INLINABLE vectorIndexBy #-}+vectorIndexBy vector pred =+  do count <- readRef (vectorCountRef vector)+     arr   <- readRef (vectorArrayRef vector)+     let loop index =+           if index >= count+           then return $ -1+           else do x <- readRef (arr ! index)+                   if pred x+                     then return index+                     else loop $ index + 1+     loop 0++-- | Remove the specified element and return a flag indicating+-- whether the element was found and removed.+vectorDelete :: (MonadRef m, Eq a) => Vector m a -> a -> Event m Bool+{-# INLINABLE vectorDelete #-}+vectorDelete vector item =+  do index <- vectorIndex vector item+     if index >= 0+       then do vectorDeleteAt vector index+               return True+       else return False+            +-- | Remove an element by the specified predicate and return the element if found.+vectorDeleteBy :: MonadRef m => Vector m a -> (a -> Bool) -> Event m (Maybe a)+{-# INLINABLE vectorDeleteBy #-}+vectorDeleteBy vector pred =+  do index <- vectorIndexBy vector pred+     if index >= 0+       then do a <- readVector vector index+               vectorDeleteAt vector index+               return (Just a)+       else return Nothing++-- | Detect whether the specified element is contained in the vector.+vectorContains :: (MonadRef m, Eq a) => Vector m a -> a -> Event m Bool+{-# INLINABLE vectorContains #-}+vectorContains vector item =+  do index <- vectorIndex vector item+     return (index >= 0)+            +-- | Detect whether an element satisfying the specified predicate is contained in the vector.+vectorContainsBy :: MonadRef m => Vector m a -> (a -> Bool) -> Event m (Maybe a)+{-# INLINABLE vectorContainsBy #-}+vectorContainsBy vector pred =+  do index <- vectorIndexBy vector pred+     if index >= 0+       then do a <- readVector vector index+               return (Just a)+       else return Nothing
aivika-transformers.cabal view
@@ -1,19 +1,36 @@ name:            aivika-transformers-version:         5.0.1+version:         5.1 synopsis:        Transformers for the Aivika simulation library description:     This package is a generalization of the aivika [1] simulation library     with extensive use of monad transformers and type families.+    It can be applied for nested simulation [2] and parallel distributed simulation [3].     .+    Unlike sequential simulation, the distribution simulation is more difficult for implementing+    the simulation experiments by the Monte-Carlo method. Therefore, there are additional packages+    that allow saving the results of distribution simulation in SQL databases+    and only then the simulation reports are generated. These reports are HTML pages+    with charts, histograms, links to CSV tables, statistics summary and so on.+    .+    This method can be used not only for the parallel distribution simulation, but also for other +    simulation models created with help of the generalized version of the Aivika simulation library.+    Please consult the AivikaSoft [4] website for more details.+    .     \[1] <http://hackage.haskell.org/package/aivika>     .+    \[2] <http://hackage.haskell.org/package/aivika-branches>+    .+    \[3] <http://hackage.haskell.org/package/aivika-distributed>+    .+    \[4] <http://www.aivikasoft.com>+    . category:        Simulation license:         BSD3 license-file:    LICENSE-copyright:       (c) 2009-2016. David Sorokin <david.sorokin@gmail.com>+copyright:       (c) 2009-2017. David Sorokin <david.sorokin@gmail.com> author:          David Sorokin maintainer:      David Sorokin <david.sorokin@gmail.com>-homepage:        http://www.aivikasoft.com/en/products/aivika.html+homepage:        http://www.aivikasoft.com cabal-version:   >= 1.10 build-type:      Simple tested-with:     GHC == 8.0.1@@ -57,6 +74,7 @@                      Simulation.Aivika.Trans.Circuit                      Simulation.Aivika.Trans.Comp                      Simulation.Aivika.Trans.Composite+                     Simulation.Aivika.Trans.Concurrent.MVar                      Simulation.Aivika.Trans.Cont                      Simulation.Aivika.Trans.DoubleLinkedList                      Simulation.Aivika.Trans.DES@@ -70,6 +88,13 @@                      Simulation.Aivika.Trans.Gate                      Simulation.Aivika.Trans.Generator                      Simulation.Aivika.Trans.Generator.Primitive+                     Simulation.Aivika.Trans.Internal.Cont+                     Simulation.Aivika.Trans.Internal.Dynamics+                     Simulation.Aivika.Trans.Internal.Event+                     Simulation.Aivika.Trans.Internal.Parameter+                     Simulation.Aivika.Trans.Internal.Process+                     Simulation.Aivika.Trans.Internal.Simulation+                     Simulation.Aivika.Trans.Internal.Specs                      Simulation.Aivika.Trans.Internal.Types                      Simulation.Aivika.Trans.Net                      Simulation.Aivika.Trans.Net.Random@@ -90,6 +115,8 @@                      Simulation.Aivika.Trans.QueueStrategy                      Simulation.Aivika.Trans.Ref                      Simulation.Aivika.Trans.Ref.Base+                     Simulation.Aivika.Trans.Ref.Base.Lazy+                     Simulation.Aivika.Trans.Ref.Base.Strict                      Simulation.Aivika.Trans.Resource                      Simulation.Aivika.Trans.Resource.Base                      Simulation.Aivika.Trans.Resource.Preemption@@ -97,6 +124,7 @@                      Simulation.Aivika.Trans.Results.Locale                      Simulation.Aivika.Trans.Results                      Simulation.Aivika.Trans.Results.IO+                     Simulation.Aivika.Trans.Results.Transform                      Simulation.Aivika.Trans.SD                      Simulation.Aivika.Trans.Server                      Simulation.Aivika.Trans.Server.Random@@ -117,6 +145,7 @@                      Simulation.Aivika.Trans.Transform.Memo.Unboxed                      Simulation.Aivika.Trans.Var                      Simulation.Aivika.Trans.Var.Unboxed+                     Simulation.Aivika.Trans.Vector                      Simulation.Aivika.IO                      Simulation.Aivika.IO.Comp                      Simulation.Aivika.IO.DES@@ -129,26 +158,20 @@                      Simulation.Aivika.IO.SD                      Simulation.Aivika.IO.Signal                      Simulation.Aivika.IO.Ref.Base+                     Simulation.Aivika.IO.Ref.Base.Lazy+                     Simulation.Aivika.IO.Ref.Base.Strict                      Simulation.Aivika.IO.Resource.Preemption                      Simulation.Aivika.IO.Resource.Preemption.Base                      Simulation.Aivika.IO.Var                      Simulation.Aivika.IO.Var.Unboxed -    other-modules:   Simulation.Aivika.Trans.Internal.Cont-                     Simulation.Aivika.Trans.Internal.Dynamics-                     Simulation.Aivika.Trans.Internal.Event-                     Simulation.Aivika.Trans.Internal.Parameter-                     Simulation.Aivika.Trans.Internal.Process-                     Simulation.Aivika.Trans.Internal.Simulation-                     Simulation.Aivika.Trans.Internal.Specs-                     -    build-depends:   base >= 4.5.0.0 && < 6,+    build-depends:   base >= 4.6.0.0 && < 6,                      mtl >= 2.1.1,                      array >= 0.3.0.0,                      containers >= 0.4.0.0,                      random >= 1.0.0.3,                      vector >= 0.10.0.1,-                     aivika >= 5.0+                     aivika >= 5.1      other-extensions:   FlexibleContexts,                         FlexibleInstances,@@ -163,7 +186,8 @@                         TypeSynonymInstances,                         DeriveDataTypeable,                         RankNTypes,-                        ConstrainedClassMethods+                        ConstrainedClassMethods,+                        OverlappingInstances                           ghc-options:     -O2