packages feed

aivika-transformers 4.5.1 → 4.6

raw patch · 21 files changed

+295/−201 lines, 21 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Simulation.Aivika.IO.Comp: instance (GHC.Base.Functor m, GHC.Base.Monad m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Exception.MonadException m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.Comp.MonadComp m
- Simulation.Aivika.IO.DES: instance (GHC.Base.Monad m, Simulation.Aivika.Trans.Comp.MonadComp m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m, Simulation.Aivika.Trans.Template.MonadEventQueueTemplate m) => Simulation.Aivika.Trans.DES.MonadDES m
- Simulation.Aivika.IO.Dynamics.Memo: instance (GHC.Base.Monad m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.Dynamics.Memo.MonadMemo m
- Simulation.Aivika.IO.Dynamics.Memo.Unboxed: instance (GHC.Base.Monad m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m, Data.Array.Base.MArray Data.Array.IO.Internals.IOUArray e GHC.Types.IO) => Simulation.Aivika.Trans.Dynamics.Memo.Unboxed.MonadMemo m e
- Simulation.Aivika.IO.Event: instance (GHC.Base.Monad m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadEventQueueTemplate m) => Simulation.Aivika.Trans.Internal.Types.EventQueueing m
- Simulation.Aivika.IO.Event: instance (GHC.Base.Monad m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadEventQueueTemplate m, Simulation.Aivika.Trans.DES.MonadDES m) => Simulation.Aivika.Trans.Internal.Event.EventIOQueueing m
- Simulation.Aivika.IO.Generator: instance (GHC.Base.Functor m, GHC.Base.Monad m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.Generator.MonadGenerator m
- Simulation.Aivika.IO.QueueStrategy: instance (GHC.Base.Monad m, Simulation.Aivika.Trans.Comp.MonadComp m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.QueueStrategy.QueueStrategy m Simulation.Aivika.Trans.QueueStrategy.FCFS
- Simulation.Aivika.IO.QueueStrategy: instance (Simulation.Aivika.Trans.Comp.MonadComp m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.QueueStrategy.QueueStrategy m Simulation.Aivika.Trans.QueueStrategy.LCFS
- Simulation.Aivika.IO.QueueStrategy: instance (Simulation.Aivika.Trans.Comp.MonadComp m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.QueueStrategy.QueueStrategy m Simulation.Aivika.Trans.QueueStrategy.SIRO
- Simulation.Aivika.IO.QueueStrategy: instance (Simulation.Aivika.Trans.Comp.MonadComp m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.QueueStrategy.QueueStrategy m Simulation.Aivika.Trans.QueueStrategy.StaticPriorities
- Simulation.Aivika.IO.QueueStrategy: instance (Simulation.Aivika.Trans.QueueStrategy.DequeueStrategy m Simulation.Aivika.Trans.QueueStrategy.FCFS, Simulation.Aivika.Trans.Comp.MonadComp m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.QueueStrategy.DeletingQueueStrategy m Simulation.Aivika.Trans.QueueStrategy.FCFS
- Simulation.Aivika.IO.QueueStrategy: instance (Simulation.Aivika.Trans.QueueStrategy.DequeueStrategy m Simulation.Aivika.Trans.QueueStrategy.FCFS, Simulation.Aivika.Trans.Comp.MonadComp m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.QueueStrategy.EnqueueStrategy m Simulation.Aivika.Trans.QueueStrategy.FCFS
- Simulation.Aivika.IO.QueueStrategy: instance (Simulation.Aivika.Trans.QueueStrategy.DequeueStrategy m Simulation.Aivika.Trans.QueueStrategy.LCFS, Simulation.Aivika.Trans.Comp.MonadComp m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.QueueStrategy.DeletingQueueStrategy m Simulation.Aivika.Trans.QueueStrategy.LCFS
- Simulation.Aivika.IO.QueueStrategy: instance (Simulation.Aivika.Trans.QueueStrategy.DequeueStrategy m Simulation.Aivika.Trans.QueueStrategy.LCFS, Simulation.Aivika.Trans.Comp.MonadComp m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.QueueStrategy.EnqueueStrategy m Simulation.Aivika.Trans.QueueStrategy.LCFS
- Simulation.Aivika.IO.QueueStrategy: instance (Simulation.Aivika.Trans.QueueStrategy.DequeueStrategy m Simulation.Aivika.Trans.QueueStrategy.SIRO, Simulation.Aivika.Trans.Comp.MonadComp m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.QueueStrategy.DeletingQueueStrategy m Simulation.Aivika.Trans.QueueStrategy.SIRO
- Simulation.Aivika.IO.QueueStrategy: instance (Simulation.Aivika.Trans.QueueStrategy.DequeueStrategy m Simulation.Aivika.Trans.QueueStrategy.SIRO, Simulation.Aivika.Trans.Comp.MonadComp m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.QueueStrategy.EnqueueStrategy m Simulation.Aivika.Trans.QueueStrategy.SIRO
- Simulation.Aivika.IO.QueueStrategy: instance (Simulation.Aivika.Trans.QueueStrategy.DequeueStrategy m Simulation.Aivika.Trans.QueueStrategy.StaticPriorities, Simulation.Aivika.Trans.Comp.MonadComp m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.QueueStrategy.DeletingQueueStrategy m Simulation.Aivika.Trans.QueueStrategy.StaticPriorities
- Simulation.Aivika.IO.QueueStrategy: instance (Simulation.Aivika.Trans.QueueStrategy.DequeueStrategy m Simulation.Aivika.Trans.QueueStrategy.StaticPriorities, Simulation.Aivika.Trans.Comp.MonadComp m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.QueueStrategy.PriorityQueueStrategy m Simulation.Aivika.Trans.QueueStrategy.StaticPriorities GHC.Types.Double
- Simulation.Aivika.IO.QueueStrategy: instance (Simulation.Aivika.Trans.QueueStrategy.QueueStrategy m Simulation.Aivika.Trans.QueueStrategy.FCFS, Simulation.Aivika.Trans.Comp.MonadComp m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.QueueStrategy.DequeueStrategy m Simulation.Aivika.Trans.QueueStrategy.FCFS
- Simulation.Aivika.IO.QueueStrategy: instance (Simulation.Aivika.Trans.QueueStrategy.QueueStrategy m Simulation.Aivika.Trans.QueueStrategy.LCFS, Simulation.Aivika.Trans.Comp.MonadComp m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.QueueStrategy.DequeueStrategy m Simulation.Aivika.Trans.QueueStrategy.LCFS
- Simulation.Aivika.IO.QueueStrategy: instance (Simulation.Aivika.Trans.QueueStrategy.QueueStrategy m Simulation.Aivika.Trans.QueueStrategy.SIRO, Simulation.Aivika.Trans.Comp.MonadComp m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.QueueStrategy.DequeueStrategy m Simulation.Aivika.Trans.QueueStrategy.SIRO
- Simulation.Aivika.IO.QueueStrategy: instance (Simulation.Aivika.Trans.QueueStrategy.QueueStrategy m Simulation.Aivika.Trans.QueueStrategy.StaticPriorities, Simulation.Aivika.Trans.Comp.MonadComp m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.QueueStrategy.DequeueStrategy m Simulation.Aivika.Trans.QueueStrategy.StaticPriorities
- Simulation.Aivika.IO.Ref.Base: instance (Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.Ref.Base.MonadRef0 m
- Simulation.Aivika.IO.Ref.Base: instance (GHC.Base.Monad m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.Ref.Base.MonadRef m
- Simulation.Aivika.IO.Resource.Preemption: instance (GHC.Base.Monad m, Simulation.Aivika.Trans.DES.MonadDES m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.Resource.Preemption.MonadResource m
- Simulation.Aivika.IO.Resource.Preemption: instance (Simulation.Aivika.Trans.DES.MonadDES m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => GHC.Classes.Eq (Simulation.Aivika.IO.Resource.Preemption.ResourceActingItem m)
- Simulation.Aivika.IO.Resource.Preemption: instance (Simulation.Aivika.Trans.DES.MonadDES m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => GHC.Classes.Eq (Simulation.Aivika.Trans.Resource.Preemption.Resource m)
- Simulation.Aivika.IO.Resource.Preemption.Base: instance (GHC.Base.Monad m, Simulation.Aivika.Trans.DES.MonadDES m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.Resource.Preemption.Base.MonadResource m
- Simulation.Aivika.IO.Resource.Preemption.Base: instance (Simulation.Aivika.Trans.DES.MonadDES m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => GHC.Classes.Eq (Simulation.Aivika.IO.Resource.Preemption.Base.ResourceActingItem m)
- Simulation.Aivika.IO.Resource.Preemption.Base: instance (Simulation.Aivika.Trans.DES.MonadDES m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => GHC.Classes.Eq (Simulation.Aivika.Trans.Resource.Preemption.Base.Resource m)
- Simulation.Aivika.IO.SD: instance (GHC.Base.Monad m, Simulation.Aivika.Trans.Comp.MonadComp m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.SD.MonadSD m
- Simulation.Aivika.IO.Var: instance (GHC.Base.Monad m, Simulation.Aivika.Trans.DES.MonadDES m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m) => Simulation.Aivika.Trans.Var.MonadVar m
- Simulation.Aivika.IO.Var.Unboxed: instance (GHC.Base.Monad m, Simulation.Aivika.Trans.DES.MonadDES m, Control.Monad.IO.Class.MonadIO m, Simulation.Aivika.Trans.Template.MonadTemplate m, Simulation.Aivika.Unboxed.Unboxed a) => Simulation.Aivika.Trans.Var.Unboxed.MonadVar m a
- Simulation.Aivika.Trans.Template: class Monad m => MonadEventQueueTemplate m
- Simulation.Aivika.Trans.Template: class Monad m => MonadTemplate m
- Simulation.Aivika.Trans.Template: instance Simulation.Aivika.Trans.Template.MonadEventQueueTemplate GHC.Types.IO
- Simulation.Aivika.Trans.Template: instance Simulation.Aivika.Trans.Template.MonadTemplate GHC.Types.IO
+ Simulation.Aivika.IO.Comp: instance Simulation.Aivika.Trans.Comp.MonadComp GHC.Types.IO
+ Simulation.Aivika.IO.DES: instance Simulation.Aivika.Trans.DES.MonadDES GHC.Types.IO
+ Simulation.Aivika.IO.Dynamics.Memo: instance Simulation.Aivika.Trans.Dynamics.Memo.MonadMemo GHC.Types.IO
+ Simulation.Aivika.IO.Dynamics.Memo.Unboxed: instance Data.Array.Base.MArray Data.Array.IO.Internals.IOUArray e GHC.Types.IO => Simulation.Aivika.Trans.Dynamics.Memo.Unboxed.MonadMemo GHC.Types.IO e
+ Simulation.Aivika.IO.Event: instance Simulation.Aivika.Trans.Internal.Event.EventIOQueueing GHC.Types.IO
+ Simulation.Aivika.IO.Event: instance Simulation.Aivika.Trans.Internal.Types.EventQueueing GHC.Types.IO
+ Simulation.Aivika.IO.Generator: instance Simulation.Aivika.Trans.Generator.MonadGenerator GHC.Types.IO
+ Simulation.Aivika.IO.QueueStrategy: instance Simulation.Aivika.Trans.QueueStrategy.DeletingQueueStrategy GHC.Types.IO Simulation.Aivika.Trans.QueueStrategy.FCFS
+ Simulation.Aivika.IO.QueueStrategy: instance Simulation.Aivika.Trans.QueueStrategy.DeletingQueueStrategy GHC.Types.IO Simulation.Aivika.Trans.QueueStrategy.LCFS
+ Simulation.Aivika.IO.QueueStrategy: instance Simulation.Aivika.Trans.QueueStrategy.DeletingQueueStrategy GHC.Types.IO Simulation.Aivika.Trans.QueueStrategy.SIRO
+ Simulation.Aivika.IO.QueueStrategy: instance Simulation.Aivika.Trans.QueueStrategy.DeletingQueueStrategy GHC.Types.IO Simulation.Aivika.Trans.QueueStrategy.StaticPriorities
+ Simulation.Aivika.IO.QueueStrategy: instance Simulation.Aivika.Trans.QueueStrategy.DequeueStrategy GHC.Types.IO Simulation.Aivika.Trans.QueueStrategy.FCFS
+ Simulation.Aivika.IO.QueueStrategy: instance Simulation.Aivika.Trans.QueueStrategy.DequeueStrategy GHC.Types.IO Simulation.Aivika.Trans.QueueStrategy.LCFS
+ Simulation.Aivika.IO.QueueStrategy: instance Simulation.Aivika.Trans.QueueStrategy.DequeueStrategy GHC.Types.IO Simulation.Aivika.Trans.QueueStrategy.SIRO
+ Simulation.Aivika.IO.QueueStrategy: instance Simulation.Aivika.Trans.QueueStrategy.DequeueStrategy GHC.Types.IO Simulation.Aivika.Trans.QueueStrategy.StaticPriorities
+ Simulation.Aivika.IO.QueueStrategy: instance Simulation.Aivika.Trans.QueueStrategy.EnqueueStrategy GHC.Types.IO Simulation.Aivika.Trans.QueueStrategy.FCFS
+ Simulation.Aivika.IO.QueueStrategy: instance Simulation.Aivika.Trans.QueueStrategy.EnqueueStrategy GHC.Types.IO Simulation.Aivika.Trans.QueueStrategy.LCFS
+ Simulation.Aivika.IO.QueueStrategy: instance Simulation.Aivika.Trans.QueueStrategy.EnqueueStrategy GHC.Types.IO Simulation.Aivika.Trans.QueueStrategy.SIRO
+ Simulation.Aivika.IO.QueueStrategy: instance Simulation.Aivika.Trans.QueueStrategy.PriorityQueueStrategy GHC.Types.IO Simulation.Aivika.Trans.QueueStrategy.StaticPriorities GHC.Types.Double
+ Simulation.Aivika.IO.QueueStrategy: instance Simulation.Aivika.Trans.QueueStrategy.QueueStrategy GHC.Types.IO Simulation.Aivika.Trans.QueueStrategy.FCFS
+ Simulation.Aivika.IO.QueueStrategy: instance Simulation.Aivika.Trans.QueueStrategy.QueueStrategy GHC.Types.IO Simulation.Aivika.Trans.QueueStrategy.LCFS
+ Simulation.Aivika.IO.QueueStrategy: instance Simulation.Aivika.Trans.QueueStrategy.QueueStrategy GHC.Types.IO Simulation.Aivika.Trans.QueueStrategy.SIRO
+ Simulation.Aivika.IO.QueueStrategy: instance Simulation.Aivika.Trans.QueueStrategy.QueueStrategy GHC.Types.IO Simulation.Aivika.Trans.QueueStrategy.StaticPriorities
+ 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.IO.Resource.Preemption: instance GHC.Classes.Eq (Simulation.Aivika.IO.Resource.Preemption.ResourceActingItem GHC.Types.IO)
+ Simulation.Aivika.IO.Resource.Preemption: instance GHC.Classes.Eq (Simulation.Aivika.Trans.Resource.Preemption.Resource GHC.Types.IO)
+ Simulation.Aivika.IO.Resource.Preemption: instance Simulation.Aivika.Trans.Resource.Preemption.MonadResource GHC.Types.IO
+ Simulation.Aivika.IO.Resource.Preemption.Base: instance GHC.Classes.Eq (Simulation.Aivika.IO.Resource.Preemption.Base.ResourceActingItem GHC.Types.IO)
+ Simulation.Aivika.IO.Resource.Preemption.Base: instance GHC.Classes.Eq (Simulation.Aivika.Trans.Resource.Preemption.Base.Resource GHC.Types.IO)
+ Simulation.Aivika.IO.Resource.Preemption.Base: instance Simulation.Aivika.Trans.Resource.Preemption.Base.MonadResource GHC.Types.IO
+ Simulation.Aivika.IO.SD: instance Simulation.Aivika.Trans.SD.MonadSD GHC.Types.IO
+ Simulation.Aivika.IO.Var: instance Simulation.Aivika.Trans.Var.MonadVar GHC.Types.IO
+ Simulation.Aivika.IO.Var.Unboxed: instance Simulation.Aivika.Unboxed.Unboxed a => Simulation.Aivika.Trans.Var.Unboxed.MonadVar GHC.Types.IO a
+ Simulation.Aivika.Trans.DoubleLinkedList: clearList :: MonadRef m => DoubleLinkedList m a -> Event m ()
+ Simulation.Aivika.Trans.DoubleLinkedList: freezeList :: MonadRef m => DoubleLinkedList m a -> Event m [a]
+ Simulation.Aivika.Trans.DoubleLinkedList: listContains :: (Eq a, MonadRef m) => DoubleLinkedList m a -> a -> Event m Bool
+ Simulation.Aivika.Trans.DoubleLinkedList: listContainsBy :: MonadRef m => DoubleLinkedList m a -> (a -> Bool) -> Event m (Maybe a)
+ Simulation.Aivika.Trans.DoubleLinkedList: listRemove :: (Eq a, MonadRef m) => DoubleLinkedList m a -> a -> Event m Bool
+ Simulation.Aivika.Trans.DoubleLinkedList: listRemoveBy :: MonadRef m => DoubleLinkedList m a -> (a -> Bool) -> Event m (Maybe a)
- Simulation.Aivika.IO.Signal: newSignalHistory :: (MonadDES m, MonadIO m, MonadTemplate m) => Signal m a -> Event m (SignalHistory m a)
+ Simulation.Aivika.IO.Signal: newSignalHistory :: Signal IO a -> Event IO (SignalHistory IO a)
- Simulation.Aivika.IO.Signal: newSignalHistoryStartingWith :: (MonadDES m, MonadIO m, MonadTemplate m) => Maybe a -> Signal m a -> Event m (SignalHistory m a)
+ Simulation.Aivika.IO.Signal: newSignalHistoryStartingWith :: Maybe a -> Signal IO a -> Event IO (SignalHistory IO a)
- Simulation.Aivika.IO.Signal: readSignalHistory :: (MonadDES m, MonadIO m, MonadTemplate m) => SignalHistory m a -> Event m (Array Int Double, Array Int a)
+ Simulation.Aivika.IO.Signal: readSignalHistory :: SignalHistory IO a -> Event IO (Array Int Double, Array Int a)

Files

+ CHANGELOG.md view
@@ -0,0 +1,12 @@++Version 4.6+-----++* Removed the MonadTemplate type class as it often caused overlapping family data+  instances.++* Updated module DoubleLinkedList.++* Breaking change: arrows Net and Processor are trying to perform computations+  in parallel as possible, when using the proc notation. Earlier they executed+  sequentially.
Simulation/Aivika/IO/Comp.hs view
@@ -1,6 +1,4 @@ -{-# LANGUAGE FlexibleInstances, UndecidableInstances #-}- -- | -- Module     : Simulation.Aivika.IO.Comp -- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>@@ -9,7 +7,7 @@ -- Stability  : experimental -- Tested with: GHC 8.0.1 ----- It allows making the 'MonadIO'-based monad an instance of type class 'MonadComp'+-- It makes the 'IO' monad an instance of type class 'MonadComp' -- on top of which the simulation monads can be built. -- module Simulation.Aivika.IO.Comp () where@@ -22,9 +20,9 @@  import Simulation.Aivika.Trans.Comp import Simulation.Aivika.Trans.Exception-import Simulation.Aivika.Trans.Template --- | A template-based instantiation of the 'MonadComp' type class. -instance (Functor m, Monad m, MonadIO m, MonadException m, MonadTemplate m) => MonadComp m where+-- | An instantiation of the 'MonadComp' type class. +instance MonadComp IO where+-- instance (Functor m, Monad m, MonadIO m, MonadException m, MonadTemplate m) => MonadComp m where    {-# SPECIALISE instance MonadComp IO #-}
Simulation/Aivika/IO/DES.hs view
@@ -1,6 +1,4 @@ -{-# LANGUAGE FlexibleInstances, UndecidableInstances #-}- -- | -- Module     : Simulation.Aivika.IO.DES -- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>@@ -9,7 +7,7 @@ -- Stability  : experimental -- Tested with: GHC 8.0.1 ----- It allows making the 'MonadIO'-based monad an instance of type class 'MonadDES'+-- It makes the 'IO' monad an instance of type class 'MonadDES' -- used for Discrete Event Simulation (DES). -- module Simulation.Aivika.IO.DES () where@@ -22,11 +20,11 @@  import Simulation.Aivika.Trans.Comp import Simulation.Aivika.Trans.DES-import Simulation.Aivika.Trans.Template  import Simulation.Aivika.IO.QueueStrategy --- | A template-based instantiation of the 'MonadDES' type class.-instance (Monad m, MonadComp m, MonadIO m, MonadTemplate m, MonadEventQueueTemplate m) => MonadDES m where+-- | An instantiation of the 'MonadDES' type class.+instance MonadDES IO where+-- instance (Monad m, MonadComp m, MonadIO m, MonadTemplate m, MonadEventQueueTemplate m) => MonadDES m where    {-# SPECIALISE instance MonadDES IO #-}
Simulation/Aivika/IO/Dynamics/Memo.hs view
@@ -9,7 +9,7 @@ -- Stability  : experimental -- Tested with: GHC 8.0.1 ----- The 'MonadIO'-based monad can be an instance of the 'MonadMemo' type class.+-- The 'IO' monad is an instance of the 'MonadMemo' type class. --  module Simulation.Aivika.IO.Dynamics.Memo () where@@ -27,11 +27,11 @@ import Simulation.Aivika.Trans.Internal.Dynamics import Simulation.Aivika.Trans.Dynamics.Memo import Simulation.Aivika.Trans.Dynamics.Extra-import Simulation.Aivika.Trans.Template import Simulation.Aivika.Trans.Array --- | The 'MonadIO' based monad is an instance of the 'MonadMemo' type class.-instance (Monad m, MonadIO m, MonadTemplate m) => MonadMemo m where+-- | The 'IO' monad is an instance of the 'MonadMemo' type class.+instance MonadMemo IO where+-- instance (Monad m, MonadIO m, MonadTemplate m) => MonadMemo m where    {-# SPECIALISE instance MonadMemo IO #-} 
Simulation/Aivika/IO/Dynamics/Memo/Unboxed.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, UndecidableInstances #-}+{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, FlexibleContexts, UndecidableInstances #-}  -- | -- Module     : Simulation.Aivika.IO.Dynamics.Memo.Unboxed@@ -9,7 +9,7 @@ -- Stability  : experimental -- Tested with: GHC 8.0.1 ----- The 'MonadIO'-based monad can be an instance of the 'MonadMemo' type class.+-- The 'IO' monad can be an instance of the 'MonadMemo' type class. --  module Simulation.Aivika.IO.Dynamics.Memo.Unboxed () where@@ -27,11 +27,11 @@ import Simulation.Aivika.Trans.Internal.Dynamics import Simulation.Aivika.Trans.Dynamics.Memo.Unboxed import Simulation.Aivika.Trans.Dynamics.Extra-import Simulation.Aivika.Trans.Template import Simulation.Aivika.Trans.Array --- | The 'MonadIO' based monad is an instance of the 'MonadMemo' type class.-instance (Monad m, MonadIO m, MonadTemplate m, MArray IOUArray e IO) => MonadMemo m e where+-- | The 'IO' based monad can be an instance of the 'MonadMemo' type class.+instance MArray IOUArray e IO => MonadMemo IO e where+-- instance (Monad m, MonadIO m, MonadTemplate m, MArray IOUArray e IO) => MonadMemo m e where    {-# SPECIALISE instance MonadMemo IO Double #-}   {-# SPECIALISE instance MonadMemo IO Float #-}
Simulation/Aivika/IO/Event.hs view
@@ -9,8 +9,8 @@ -- Stability  : experimental -- Tested with: GHC 8.0.1 ----- The module defines a template-based event queue, where--- the 'MonadIO'-based monad can be an instance of 'EventQueueing' and 'EventIOQueueing'.+-- The module defines an event queue, where the 'IO' monad is an instance of+-- 'EventQueueing' and 'EventIOQueueing'. -- module Simulation.Aivika.IO.Event () where @@ -24,17 +24,17 @@ import Simulation.Aivika.Trans.Ref.Base import Simulation.Aivika.Trans.DES import Simulation.Aivika.Trans.Comp-import Simulation.Aivika.Trans.Template import Simulation.Aivika.Trans.Internal.Types import Simulation.Aivika.Trans.Event --- | A template-based implementation of the 'EventQueueing' type class.-instance (Monad m, MonadIO m, MonadEventQueueTemplate m) => EventQueueing m where+-- | An implementation of the 'EventQueueing' type class.+instance EventQueueing IO where+-- instance (Monad m, MonadIO m, MonadEventQueueTemplate m) => EventQueueing m where    {-# SPECIALISE instance EventQueueing IO #-} -  data EventQueue m =-    EventQueue { queuePQ :: PQ.PriorityQueue (Point m -> m ()),+  data EventQueue IO =+    EventQueue { queuePQ :: PQ.PriorityQueue (Point IO -> IO ()),                  -- ^ the underlying priority queue                  queueBusy :: IORef Bool,                  -- ^ whether the queue is currently processing events@@ -70,7 +70,8 @@     liftIO . PQ.queueCount . queuePQ . runEventQueue . pointRun  -- | Process the pending events.-processPendingEventsCore :: (MonadIO m, MonadEventQueueTemplate m) => Bool -> Dynamics m ()+processPendingEventsCore :: Bool -> Dynamics IO ()+-- processPendingEventsCore :: (MonadIO m, MonadEventQueueTemplate m) => Bool -> Dynamics m () {-# INLINE processPendingEventsCore #-} processPendingEventsCore includingCurrentEvents = Dynamics r where   r p =@@ -105,7 +106,8 @@                  call q p  -- | Process the pending events synchronously, i.e. without past.-processPendingEvents :: (MonadIO m, MonadEventQueueTemplate m) => Bool -> Dynamics m ()+processPendingEvents :: Bool -> Dynamics IO ()+-- processPendingEvents :: (MonadIO m, MonadEventQueueTemplate m) => Bool -> Dynamics m () {-# INLINE processPendingEvents #-} processPendingEvents includingCurrentEvents = Dynamics r where   r p =@@ -120,34 +122,42 @@   m = processPendingEventsCore includingCurrentEvents  -- | A memoized value.-processEventsIncludingCurrent :: (MonadIO m, MonadEventQueueTemplate m) => Dynamics m ()+processEventsIncludingCurrent :: Dynamics IO ()+-- processEventsIncludingCurrent :: (MonadIO m, MonadEventQueueTemplate m) => Dynamics m () {-# INLINE processEventsIncludingCurrent #-} processEventsIncludingCurrent = processPendingEvents True  -- | A memoized value.-processEventsIncludingEarlier :: (MonadIO m, MonadEventQueueTemplate m) => Dynamics m ()+processEventsIncludingEarlier :: Dynamics IO ()+-- processEventsIncludingEarlier :: (MonadIO m, MonadEventQueueTemplate m) => Dynamics m () {-# INLINE processEventsIncludingEarlier #-} processEventsIncludingEarlier = processPendingEvents False  -- | A memoized value.-processEventsIncludingCurrentCore :: (MonadIO m, MonadEventQueueTemplate m) => Dynamics m ()+processEventsIncludingCurrentCore :: Dynamics IO ()+-- processEventsIncludingCurrentCore :: (MonadIO m, MonadEventQueueTemplate m) => Dynamics m () {-# INLINE processEventsIncludingCurrentCore #-} processEventsIncludingCurrentCore = processPendingEventsCore True  -- | A memoized value.-processEventsIncludingEarlierCore :: (MonadIO m, MonadEventQueueTemplate m) => Dynamics m ()+processEventsIncludingEarlierCore :: Dynamics IO ()+-- processEventsIncludingEarlierCore :: (MonadIO m, MonadEventQueueTemplate m) => Dynamics m () {-# INLINE processEventsIncludingEarlierCore #-} processEventsIncludingEarlierCore = processPendingEventsCore True  -- | Process the events.-processEvents :: (MonadIO m, MonadEventQueueTemplate m) => EventProcessing -> Dynamics m ()+processEvents :: EventProcessing -> Dynamics IO ()+-- processEvents :: (MonadIO m, MonadEventQueueTemplate m) => EventProcessing -> Dynamics m () {-# INLINABLE processEvents #-} processEvents CurrentEvents = processEventsIncludingCurrent processEvents EarlierEvents = processEventsIncludingEarlier processEvents CurrentEventsOrFromPast = processEventsIncludingCurrentCore processEvents EarlierEventsOrFromPast = processEventsIncludingEarlierCore --- | A template-based implementation of the 'EventIOQueueing' type class.-instance (Monad m, MonadIO m, MonadEventQueueTemplate m, MonadDES m) => EventIOQueueing m where+-- | An implementation of the 'EventIOQueueing' type class.+instance EventIOQueueing IO where+-- instance (Monad m, MonadIO m, MonadEventQueueTemplate m, MonadDES m) => EventIOQueueing m where++  {-# SPECIALISE instance EventIOQueueing IO #-}    enqueueEventIO = enqueueEvent
Simulation/Aivika/IO/Generator.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE TypeFamilies, FlexibleInstances, UndecidableInstances #-}+{-# LANGUAGE TypeFamilies #-}  -- | -- Module     : Simulation.Aivika.IO.Generator@@ -10,7 +10,7 @@ -- Tested with: GHC 8.0.1 -- -- Here is defined a random number generator, where--- the 'MonadIO'-based monad can be an instance of 'MonadGenerator'.+-- the 'IO' monad is an instance of 'MonadGenerator'. -- module Simulation.Aivika.IO.Generator () where @@ -23,16 +23,16 @@  import Simulation.Aivika.Trans.Generator import Simulation.Aivika.Trans.Generator.Primitive-import Simulation.Aivika.Trans.Template -instance (Functor m, Monad m, MonadIO m, MonadTemplate m) => MonadGenerator m where+instance MonadGenerator IO where+-- instance (Functor m, Monad m, MonadIO m, MonadTemplate m) => MonadGenerator m where    {-# SPECIALISE instance MonadGenerator IO #-} -  data Generator m =-    Generator { generator01 :: m Double,+  data Generator IO =+    Generator { generator01 :: IO Double,                 -- ^ the generator of uniform numbers from 0 to 1-                generatorNormal01 :: m Double+                generatorNormal01 :: IO Double                 -- ^ the generator of normal numbers with mean 0 and variance 1               } 
Simulation/Aivika/IO/QueueStrategy.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE TypeFamilies, MultiParamTypeClasses, FlexibleInstances, FlexibleContexts, FunctionalDependencies, UndecidableInstances #-}+{-# LANGUAGE TypeFamilies, MultiParamTypeClasses #-}  -- | -- Module     : Simulation.Aivika.IO.QueueStrategy@@ -10,7 +10,7 @@ -- Tested with: GHC 8.0.1 -- -- This module defines some queue strategy instances--- for the 'MonadIO'-based computations.+-- for the 'IO' computation. -- module Simulation.Aivika.IO.QueueStrategy () where @@ -22,7 +22,6 @@ import Simulation.Aivika.Trans.Simulation import Simulation.Aivika.Trans.Event import Simulation.Aivika.Trans.QueueStrategy-import Simulation.Aivika.Trans.Template  import Simulation.Aivika.IO.Comp @@ -31,13 +30,14 @@ import qualified Simulation.Aivika.Vector as V  -- | An implementation of the 'FCFS' queue strategy.-instance (Monad m, MonadComp m, MonadIO m, MonadTemplate m)-         => QueueStrategy m FCFS where+instance QueueStrategy IO FCFS where+-- instance (Monad m, MonadComp m, MonadIO m, MonadTemplate m)+--          => QueueStrategy m FCFS where    {-# SPECIALISE instance QueueStrategy IO FCFS #-}    -- | A queue used by the 'FCFS' strategy.-  newtype StrategyQueue m FCFS a = FCFSQueue (LL.DoubleLinkedList a)+  newtype StrategyQueue IO FCFS a = FCFSQueue (LL.DoubleLinkedList a)    {-# INLINABLE newStrategyQueue #-}   newStrategyQueue s =@@ -49,8 +49,9 @@     liftIO $ LL.listNull q  -- | An implementation of the 'FCFS' queue strategy.-instance (QueueStrategy m FCFS, MonadComp m, MonadIO m, MonadTemplate m)-         => DequeueStrategy m FCFS where+instance DequeueStrategy IO FCFS where+-- instance (QueueStrategy m FCFS, MonadComp m, MonadIO m, MonadTemplate m)+--          => DequeueStrategy m FCFS where    {-# SPECIALISE instance DequeueStrategy IO FCFS #-} @@ -62,8 +63,9 @@        return i  -- | An implementation of the 'FCFS' queue strategy.-instance (DequeueStrategy m FCFS, MonadComp m, MonadIO m, MonadTemplate m)-         => EnqueueStrategy m FCFS where+instance EnqueueStrategy IO FCFS where+-- instance (DequeueStrategy m FCFS, MonadComp m, MonadIO m, MonadTemplate m)+--          => EnqueueStrategy m FCFS where    {-# SPECIALISE instance EnqueueStrategy IO FCFS #-} @@ -72,8 +74,9 @@     liftIO $ LL.listAddLast q i  -- | An implementation of the 'FCFS' queue strategy.-instance (DequeueStrategy m FCFS, MonadComp m, MonadIO m, MonadTemplate m)-         => DeletingQueueStrategy m FCFS where+instance DeletingQueueStrategy IO FCFS where+-- instance (DequeueStrategy m FCFS, MonadComp m, MonadIO m, MonadTemplate m)+--          => DeletingQueueStrategy m FCFS where    {-# SPECIALISE instance DeletingQueueStrategy IO FCFS #-} @@ -86,13 +89,14 @@     liftIO $ LL.listContainsBy q p  -- | An implementation of the 'LCFS' queue strategy.-instance (MonadComp m, MonadIO m, MonadTemplate m)-         => QueueStrategy m LCFS where+instance QueueStrategy IO LCFS where+-- instance (MonadComp m, MonadIO m, MonadTemplate m)+--          => QueueStrategy m LCFS where    {-# SPECIALISE instance QueueStrategy IO LCFS #-}    -- | A queue used by the 'LCFS' strategy.-  newtype StrategyQueue m LCFS a = LCFSQueue (LL.DoubleLinkedList a)+  newtype StrategyQueue IO LCFS a = LCFSQueue (LL.DoubleLinkedList a)    {-# INLINABLE newStrategyQueue #-}   newStrategyQueue s =@@ -104,8 +108,9 @@     liftIO $ LL.listNull q  -- | An implementation of the 'LCFS' queue strategy.-instance (QueueStrategy m LCFS, MonadComp m, MonadIO m, MonadTemplate m)-         => DequeueStrategy m LCFS where+instance DequeueStrategy IO LCFS where+-- instance (QueueStrategy m LCFS, MonadComp m, MonadIO m, MonadTemplate m)+--          => DequeueStrategy m LCFS where    {-# SPECIALISE instance DequeueStrategy IO LCFS #-} @@ -117,8 +122,9 @@        return i  -- | An implementation of the 'LCFS' queue strategy.-instance (DequeueStrategy m LCFS, MonadComp m, MonadIO m, MonadTemplate m)-         => EnqueueStrategy m LCFS where+instance EnqueueStrategy IO LCFS where+-- instance (DequeueStrategy m LCFS, MonadComp m, MonadIO m, MonadTemplate m)+--          => EnqueueStrategy m LCFS where    {-# SPECIALISE instance EnqueueStrategy IO LCFS #-} @@ -127,8 +133,9 @@     liftIO $ LL.listInsertFirst q i  -- | An implementation of the 'LCFS' queue strategy.-instance (DequeueStrategy m LCFS, MonadComp m, MonadIO m, MonadTemplate m)-         => DeletingQueueStrategy m LCFS where+instance DeletingQueueStrategy IO LCFS where+-- instance (DequeueStrategy m LCFS, MonadComp m, MonadIO m, MonadTemplate m)+--          => DeletingQueueStrategy m LCFS where    {-# SPECIALISE instance DeletingQueueStrategy IO LCFS #-} @@ -140,14 +147,15 @@   strategyQueueContainsBy (LCFSQueue q) p =     liftIO $ LL.listContainsBy q p --- | A template-based implementation of the 'StaticPriorities' queue strategy.-instance (MonadComp m, MonadIO m, MonadTemplate m)-         => QueueStrategy m StaticPriorities where+-- | An implementation of the 'StaticPriorities' queue strategy.+instance QueueStrategy IO StaticPriorities where+-- instance (MonadComp m, MonadIO m, MonadTemplate m)+--          => QueueStrategy m StaticPriorities where    {-# SPECIALISE instance QueueStrategy IO StaticPriorities #-}    -- | A queue used by the 'StaticPriorities' strategy.-  newtype StrategyQueue m StaticPriorities a = StaticPriorityQueue (PQ.PriorityQueue a)+  newtype StrategyQueue IO StaticPriorities a = StaticPriorityQueue (PQ.PriorityQueue a)    {-# INLINABLE newStrategyQueue #-}   newStrategyQueue s =@@ -158,9 +166,10 @@   strategyQueueNull (StaticPriorityQueue q) =     liftIO $ PQ.queueNull q --- | A template-based implementation of the 'StaticPriorities' queue strategy.-instance (QueueStrategy m StaticPriorities, MonadComp m, MonadIO m, MonadTemplate m)-         => DequeueStrategy m StaticPriorities where+-- | An implementation of the 'StaticPriorities' queue strategy.+instance DequeueStrategy IO StaticPriorities where+-- instance (QueueStrategy m StaticPriorities, MonadComp m, MonadIO m, MonadTemplate m)+--          => DequeueStrategy m StaticPriorities where    {-# SPECIALISE instance DequeueStrategy IO StaticPriorities #-} @@ -171,9 +180,10 @@        PQ.dequeue q        return i --- | A template-based implementation of the 'StaticPriorities' queue strategy.-instance (DequeueStrategy m StaticPriorities, MonadComp m, MonadIO m, MonadTemplate m)-         => PriorityQueueStrategy m StaticPriorities Double where+-- | An implementation of the 'StaticPriorities' queue strategy.+instance PriorityQueueStrategy IO StaticPriorities Double where+-- instance (DequeueStrategy m StaticPriorities, MonadComp m, MonadIO m, MonadTemplate m)+--          => PriorityQueueStrategy m StaticPriorities Double where    {-# SPECIALISE instance PriorityQueueStrategy IO StaticPriorities Double #-} @@ -182,8 +192,9 @@     liftIO $ PQ.enqueue q p i  -- | An implementation of the 'StaticPriorities' queue strategy.-instance (DequeueStrategy m StaticPriorities, MonadComp m, MonadIO m, MonadTemplate m)-         => DeletingQueueStrategy m StaticPriorities where+instance DeletingQueueStrategy IO StaticPriorities where+-- instance (DequeueStrategy m StaticPriorities, MonadComp m, MonadIO m, MonadTemplate m)+--          => DeletingQueueStrategy m StaticPriorities where    {-# SPECIALISE instance DeletingQueueStrategy IO StaticPriorities #-} @@ -195,14 +206,15 @@   strategyQueueContainsBy (StaticPriorityQueue q) p =     liftIO $ PQ.queueContainsBy q p --- | A template-based implementation of the 'SIRO' queue strategy.-instance (MonadComp m, MonadIO m, MonadTemplate m)-         => QueueStrategy m SIRO where+-- | An implementation of the 'SIRO' queue strategy.+instance QueueStrategy IO SIRO where+-- instance (MonadComp m, MonadIO m, MonadTemplate m)+--          => QueueStrategy m SIRO where    {-# SPECIALISE instance QueueStrategy IO SIRO #-}    -- | A queue used by the 'SIRO' strategy.-  newtype StrategyQueue m SIRO a = SIROQueue (V.Vector a)+  newtype StrategyQueue IO SIRO a = SIROQueue (V.Vector a)      {-# INLINABLE newStrategyQueue #-}   newStrategyQueue s =@@ -215,9 +227,10 @@     do n <- V.vectorCount q        return (n == 0) --- | A template-based implementation of the 'SIRO' queue strategy.-instance (QueueStrategy m SIRO, MonadComp m, MonadIO m, MonadTemplate m)-         => DequeueStrategy m SIRO where+-- | An implementation of the 'SIRO' queue strategy.+instance DequeueStrategy IO SIRO where+-- instance (QueueStrategy m SIRO, MonadComp m, MonadIO m, MonadTemplate m)+--          => DequeueStrategy m SIRO where    {-# SPECIALISE instance DequeueStrategy IO SIRO #-} @@ -229,9 +242,10 @@        liftIO $ V.vectorDeleteAt q i        return x --- | A template-based implementation of the 'SIRO' queue strategy.-instance (DequeueStrategy m SIRO, MonadComp m, MonadIO m, MonadTemplate m)-         => EnqueueStrategy m SIRO where+-- | An implementation of the 'SIRO' queue strategy.+instance EnqueueStrategy IO SIRO where+-- instance (DequeueStrategy m SIRO, MonadComp m, MonadIO m, MonadTemplate m)+--          => EnqueueStrategy m SIRO where    {-# SPECIALISE instance EnqueueStrategy IO SIRO #-} @@ -240,8 +254,9 @@     liftIO $ V.appendVector q i  -- | An implementation of the 'SIRO' queue strategy.-instance (DequeueStrategy m SIRO, MonadComp m, MonadIO m, MonadTemplate m)-         => DeletingQueueStrategy m SIRO where+instance DeletingQueueStrategy IO SIRO where+-- instance (DequeueStrategy m SIRO, MonadComp m, MonadIO m, MonadTemplate m)+--          => DeletingQueueStrategy m SIRO where    {-# SPECIALISE instance DeletingQueueStrategy IO SIRO #-} 
Simulation/Aivika/IO/Ref/Base.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE TypeFamilies, FlexibleInstances, UndecidableInstances #-}+{-# LANGUAGE TypeFamilies #-}  -- | -- Module     : Simulation.Aivika.IO.Ref.Base@@ -9,7 +9,7 @@ -- Stability  : experimental -- Tested with: GHC 8.0.1 ----- The 'MonadIO'-based monad can be an instance of 'MonadRef'.+-- The 'IO' monad in an instance of 'MonadRef'. -- module Simulation.Aivika.IO.Ref.Base () where @@ -20,15 +20,15 @@  import Simulation.Aivika.Trans.Internal.Types import Simulation.Aivika.Trans.Ref.Base-import Simulation.Aivika.Trans.Template --- | The 'MonadIO' based monad is an instance of 'MonadRef'.-instance (Monad m, MonadIO m, MonadTemplate m) => MonadRef m where+-- | '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 m a = Ref { refValue :: IORef a }+  newtype Ref IO a = Ref { refValue :: IORef a }    {-# INLINE newRef #-}   newRef a =@@ -53,11 +53,12 @@   {-# INLINE equalRef #-}   equalRef (Ref r1) (Ref r2) = (r1 == r2) --- | The 'MonadIO' based monad is an instance of 'MonadRef0'.-instance (MonadIO m, MonadTemplate m) => MonadRef0 m where+-- | '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
Simulation/Aivika/IO/Resource/Preemption.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE TypeFamilies, FlexibleInstances, UndecidableInstances #-}+{-# LANGUAGE TypeFamilies, FlexibleInstances #-}  -- | -- Module     : Simulation.Aivika.IO.Resource.Preemption@@ -10,7 +10,7 @@ -- Tested with: GHC 8.0.1 -- -- This module defines the preemptible resource, where--- the 'MonadIO'-based monad can be an instance of 'MonadResource'.+-- the 'IO' monad is an instance of 'MonadResource'. -- module Simulation.Aivika.IO.Resource.Preemption () where @@ -24,7 +24,6 @@ import Simulation.Aivika.Trans.Exception import Simulation.Aivika.Trans.Ref.Base import Simulation.Aivika.Trans.DES-import Simulation.Aivika.Trans.Template import Simulation.Aivika.Trans.Internal.Specs import Simulation.Aivika.Trans.Internal.Simulation import Simulation.Aivika.Trans.Internal.Event@@ -38,30 +37,31 @@  import qualified Simulation.Aivika.PriorityQueue as PQ --- | The 'MonadIO' based monad is an instance of 'MonadResource'.-instance (Monad m, MonadDES m, MonadIO m, MonadTemplate m) => MonadResource m where+-- | The 'IO' monad is an instance of 'MonadResource'.+instance MonadResource IO where+-- instance (Monad m, MonadDES m, MonadIO m, MonadTemplate m) => MonadResource m where    {-# SPECIALISE instance MonadResource IO #-}    -- | A template-based implementation of the preemptible resource.-  data Resource m = +  data Resource IO =      Resource { resourceMaxCount0 :: Maybe Int,                -- ^ Return the maximum count of the resource, where 'Nothing'                -- means that the resource has no upper bound.                resourceCountRef :: IORef Int,                resourceCountStatsRef :: IORef (TimingStats Int),-               resourceCountSource :: SignalSource m Int,+               resourceCountSource :: SignalSource IO Int,                resourceUtilisationCountRef :: IORef Int,                resourceUtilisationCountStatsRef :: IORef (TimingStats Int),-               resourceUtilisationCountSource :: SignalSource m Int,+               resourceUtilisationCountSource :: SignalSource IO Int,                resourceQueueCountRef :: IORef Int,                resourceQueueCountStatsRef :: IORef (TimingStats Int),-               resourceQueueCountSource :: SignalSource m Int,+               resourceQueueCountSource :: SignalSource IO Int,                resourceTotalWaitTimeRef :: IORef Double,                resourceWaitTimeRef :: IORef (SamplingStats Double),-               resourceWaitTimeSource :: SignalSource m (),-               resourceActingQueue :: PQ.PriorityQueue (ResourceActingItem m),-               resourceWaitQueue :: PQ.PriorityQueue (ResourceAwaitingItem m) }+               resourceWaitTimeSource :: SignalSource IO (),+               resourceActingQueue :: PQ.PriorityQueue (ResourceActingItem IO),+               resourceWaitQueue :: PQ.PriorityQueue (ResourceAwaitingItem IO) }    {-# INLINABLE newResource #-}   newResource count =@@ -290,22 +290,27 @@                           preemptedItemTime :: Double,                           preemptedItemId :: ProcessId m } -instance (MonadDES m, MonadIO m, MonadTemplate m) => Eq (Resource m) where+instance Eq (Resource IO) where+-- instance (MonadDES m, MonadIO m, MonadTemplate m) => Eq (Resource m) where    {-# INLINABLE (==) #-}   x == y = resourceCountRef x == resourceCountRef y  -- unique references -instance (MonadDES m, MonadIO m, MonadTemplate m) => Eq (ResourceActingItem m) where+instance Eq (ResourceActingItem IO) where+-- instance (MonadDES m, MonadIO m, MonadTemplate m) => Eq (ResourceActingItem m) where    {-# INLINABLE (==) #-}   x == y = actingItemId x == actingItemId y  -- | Release the resource increasing its count and resuming one of the -- previously suspended or preempted processes as possible.-releaseResource' :: (MonadDES m, MonadIO m, MonadTemplate m)-                    => Resource m+releaseResource' :: Resource IO                     -- ^ the resource to release-                    -> Event m ()+                    -> Event IO ()+-- releaseResource' :: (MonadDES m, MonadIO m, MonadTemplate m)+--                     => Resource m+--                     -- ^ the resource to release+--                     -> Event m () {-# INLINABLE releaseResource' #-} releaseResource' r =   Event $ \p ->@@ -349,7 +354,8 @@  -- | Preempt a process with the lowest priority that acquires yet the resource -- and decrease the count of available resource by 1. -decResourceCount' :: (MonadDES m, MonadIO m, MonadTemplate m) => Resource m -> Event m ()+decResourceCount' :: Resource IO -> Event IO ()+-- decResourceCount' :: (MonadDES m, MonadIO m, MonadTemplate m) => Resource m -> Event m () {-# INLINABLE decResourceCount' #-} decResourceCount' r =   Event $ \p ->@@ -372,7 +378,8 @@      invokeEvent p $ updateResourceCount r (-1)  -- | Update the resource count and its statistics.-updateResourceCount :: (MonadDES m, MonadIO m, MonadTemplate m) => Resource m -> Int -> Event m ()+updateResourceCount :: Resource IO -> Int -> Event IO ()+-- updateResourceCount :: (MonadDES m, MonadIO m, MonadTemplate m) => Resource m -> Int -> Event m () {-# INLINABLE updateResourceCount #-} updateResourceCount r delta =   Event $ \p ->@@ -386,7 +393,8 @@        triggerSignal (resourceCountSource r) a'  -- | Update the resource queue length and its statistics.-updateResourceQueueCount :: (MonadDES m, MonadIO m, MonadTemplate m) => Resource m -> Int -> Event m ()+updateResourceQueueCount :: Resource IO -> Int -> Event IO ()+-- updateResourceQueueCount :: (MonadDES m, MonadIO m, MonadTemplate m) => Resource m -> Int -> Event m () {-# INLINABLE updateResourceQueueCount #-} updateResourceQueueCount r delta =   Event $ \p ->@@ -400,7 +408,8 @@        triggerSignal (resourceQueueCountSource r) a'  -- | Update the resource utilisation count and its statistics.-updateResourceUtilisationCount :: (MonadDES m, MonadIO m, MonadTemplate m) => Resource m -> Int -> Event m ()+updateResourceUtilisationCount :: Resource IO -> Int -> Event IO ()+-- updateResourceUtilisationCount :: (MonadDES m, MonadIO m, MonadTemplate m) => Resource m -> Int -> Event m () {-# INLINABLE updateResourceUtilisationCount #-} updateResourceUtilisationCount r delta =   Event $ \p ->@@ -414,7 +423,8 @@        triggerSignal (resourceUtilisationCountSource r) a'  -- | Update the resource wait time and its statistics.-updateResourceWaitTime :: (MonadDES m, MonadIO m, MonadTemplate m) => Resource m -> Double -> Event m ()+updateResourceWaitTime :: Resource IO -> Double -> Event IO ()+-- updateResourceWaitTime :: (MonadDES m, MonadIO m, MonadTemplate m) => Resource m -> Double -> Event m () {-# INLINABLE updateResourceWaitTime #-} updateResourceWaitTime r delta =   Event $ \p ->
Simulation/Aivika/IO/Resource/Preemption/Base.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE TypeFamilies, FlexibleInstances, UndecidableInstances #-}+{-# LANGUAGE TypeFamilies, FlexibleInstances #-}  -- | -- Module     : Simulation.Aivika.IO.Resource.Preemption.Base@@ -9,8 +9,8 @@ -- Stability  : experimental -- Tested with: GHC 8.0.1 ----- This module defines the optimised preemptible resource, where--- the 'MonadIO'-based monad can be an instance of 'MonadResource'.+-- This module defines an optimised preemptible resource, where+-- the 'IO' monad is an instance of 'MonadResource'. -- module Simulation.Aivika.IO.Resource.Preemption.Base () where @@ -23,7 +23,6 @@ import Simulation.Aivika.Trans.Exception import Simulation.Aivika.Trans.Ref.Base import Simulation.Aivika.Trans.DES-import Simulation.Aivika.Trans.Template import Simulation.Aivika.Trans.Internal.Specs import Simulation.Aivika.Trans.Internal.Simulation import Simulation.Aivika.Trans.Internal.Event@@ -35,17 +34,18 @@  import qualified Simulation.Aivika.PriorityQueue as PQ --- | The 'MonadIO' based monad is an instance of 'MonadResource'.-instance (Monad m, MonadDES m, MonadIO m, MonadTemplate m) => MonadResource m where+-- | The 'IO' monad is an instance of 'MonadResource'.+instance MonadResource IO where+-- instance (Monad m, MonadDES m, MonadIO m, MonadTemplate m) => MonadResource m where    {-# SPECIALISE instance MonadResource IO #-}    -- | A template-based implementation of the preemptible resource.-  data Resource m = +  data Resource IO =      Resource { resourceMaxCount0 :: Maybe Int,                resourceCountRef :: IORef Int,-               resourceActingQueue :: PQ.PriorityQueue (ResourceActingItem m),-               resourceWaitQueue :: PQ.PriorityQueue (ResourceAwaitingItem m) }+               resourceActingQueue :: PQ.PriorityQueue (ResourceActingItem IO),+               resourceWaitQueue :: PQ.PriorityQueue (ResourceAwaitingItem IO) }    {-# INLINABLE newResource #-}   newResource count =@@ -189,17 +189,20 @@ type ResourceAwaitingItem m =   Either (ResourceRequestingItem m) (ResourcePreemptedItem m) -instance (MonadDES m, MonadIO m, MonadTemplate m) => Eq (Resource m) where+instance Eq (Resource IO) where+-- instance (MonadDES m, MonadIO m, MonadTemplate m) => Eq (Resource m) where    {-# INLINABLE (==) #-}   x == y = resourceCountRef x == resourceCountRef y  -- unique references -instance (MonadDES m, MonadIO m, MonadTemplate m) => Eq (ResourceActingItem m) where+instance Eq (ResourceActingItem IO) where+-- instance (MonadDES m, MonadIO m, MonadTemplate m) => Eq (ResourceActingItem m) where    {-# INLINABLE (==) #-}   x == y = actingItemId x == actingItemId y -releaseResource' :: (MonadDES m, MonadIO m, MonadTemplate m) => Resource m -> Event m ()+releaseResource' :: Resource IO -> Event IO ()+-- releaseResource' :: (MonadDES m, MonadIO m, MonadTemplate m) => Resource m -> Event m () {-# INLINABLE releaseResource' #-} releaseResource' r =   Event $ \p ->@@ -236,7 +239,8 @@                           do liftIO $ PQ.enqueue (resourceActingQueue r) (- priority) $ ResourceActingItem priority pid                              invokeEvent p $ processPreemptionEnd pid -decResourceCount' :: (MonadDES m, MonadIO m, MonadTemplate m) => Resource m -> Event m ()+decResourceCount' :: Resource IO -> Event IO ()+-- decResourceCount' :: (MonadDES m, MonadIO m, MonadTemplate m) => Resource m -> Event m () {-# INLINABLE decResourceCount' #-} decResourceCount' r =   Event $ \p ->
Simulation/Aivika/IO/SD.hs view
@@ -1,6 +1,4 @@ -{-# LANGUAGE FlexibleInstances, UndecidableInstances #-}- -- | -- Module     : Simulation.Aivika.IO.SD -- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>@@ -9,7 +7,7 @@ -- Stability  : experimental -- Tested with: GHC 8.0.1 ----- It allows making the 'MonadIO'-based monad an instance of type class 'MonadSD'+-- It makes the 'IO' monad an instance of type class 'MonadSD' -- used for System Dynamics (SD). -- module Simulation.Aivika.IO.SD () where@@ -22,9 +20,9 @@  import Simulation.Aivika.Trans.Comp import Simulation.Aivika.Trans.SD-import Simulation.Aivika.Trans.Template --- | A template-based instantiation of the 'MonadSD' type class.-instance (Monad m, MonadComp m, MonadIO m, MonadTemplate m) => MonadSD m where+-- | An instantiation of the 'MonadSD' type class.+instance MonadSD IO where+-- instance (Monad m, MonadComp m, MonadIO m, MonadTemplate m) => MonadSD m where      {-# SPECIALISE instance MonadSD IO #-}
Simulation/Aivika/IO/Signal.hs view
@@ -29,7 +29,6 @@ import Simulation.Aivika.Trans.DES import Simulation.Aivika.Trans.Internal.Specs import Simulation.Aivika.Trans.Internal.Event-import Simulation.Aivika.Trans.Template import Simulation.Aivika.Trans.Signal  import Simulation.Aivika.IO.DES@@ -45,16 +44,18 @@                   signalHistoryValues :: V.Vector a }  -- | Create a history of the signal values.-newSignalHistory :: (MonadDES m, MonadIO m, MonadTemplate m)-                    => Signal m a -> Event m (SignalHistory m a)+newSignalHistory :: Signal IO a -> Event IO (SignalHistory IO a)+-- newSignalHistory :: (MonadDES m, MonadIO m, MonadTemplate m)+--                     => Signal m a -> Event 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, MonadIO m, MonadTemplate m)-                                => Maybe a -> Signal m a -> Event m (SignalHistory m a)+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) {-# INLINABLE newSignalHistoryStartingWith #-} newSignalHistoryStartingWith init signal =   Event $ \p ->@@ -77,8 +78,9 @@                             signalHistoryValues = xs }         -- | Read the history of signal values.-readSignalHistory :: (MonadDES m, MonadIO m, MonadTemplate m)-                     => SignalHistory m a -> Event m (Array Int Double, Array Int a)+readSignalHistory :: SignalHistory IO a -> Event IO (Array Int Double, Array Int a)+-- readSignalHistory :: (MonadDES m, MonadIO m, MonadTemplate m)+--                      => SignalHistory m a -> Event m (Array Int Double, Array Int a) {-# INLINABLE readSignalHistory #-} readSignalHistory history =   Event $ \p ->
Simulation/Aivika/IO/Var.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE TypeFamilies, FlexibleInstances, UndecidableInstances #-}+{-# LANGUAGE TypeFamilies #-}  -- | -- Module     : Simulation.Aivika.IO.Var@@ -9,7 +9,7 @@ -- Stability  : experimental -- Tested with: GHC 8.0.1 ----- The 'MonadIO'-based monad can be an instance 'MonadVar'.+-- The 'IO' monad is an instance of 'MonadVar'. -- module Simulation.Aivika.IO.Var () where @@ -24,7 +24,6 @@ import Simulation.Aivika.Trans.Internal.Event import Simulation.Aivika.Trans.Ref import Simulation.Aivika.Trans.Signal-import Simulation.Aivika.Trans.Template import Simulation.Aivika.Trans.Var  import Simulation.Aivika.IO.DES@@ -32,17 +31,18 @@ import qualified Simulation.Aivika.Vector as V import qualified Simulation.Aivika.Vector.Unboxed as UV --- | The 'MonadIO' based monad is an instance of 'MonadVar'.-instance (Monad m, MonadDES m, MonadIO m, MonadTemplate m) => MonadVar m where+-- | The 'IO' monad is an instance of 'MonadVar'.+instance MonadVar IO where+-- instance (Monad m, MonadDES m, MonadIO m, MonadTemplate m) => MonadVar m where    {-# SPECIALISE instance MonadVar IO #-}    -- | A template-based implementation of the variable.-  data Var m a = +  data Var IO a =      Var { varXS    :: UV.Vector Double,           varMS    :: V.Vector a,           varYS    :: V.Vector a,-          varChangedSource :: SignalSource m a }+          varChangedSource :: SignalSource IO a }    {-# INLINABLE newVar #-}   newVar a =
Simulation/Aivika/IO/Var/Unboxed.hs view
@@ -9,7 +9,7 @@ -- Stability  : experimental -- Tested with: GHC 8.0.1 ----- The 'MonadIO'-based monad can be an instance 'MonadVar'.+-- The 'IO' monad can be an instance of 'MonadVar'. -- module Simulation.Aivika.IO.Var.Unboxed () where @@ -24,7 +24,6 @@ import Simulation.Aivika.Trans.Internal.Event import Simulation.Aivika.Trans.Ref import Simulation.Aivika.Trans.Signal-import Simulation.Aivika.Trans.Template import Simulation.Aivika.Trans.Var.Unboxed  import Simulation.Aivika.IO.DES@@ -32,19 +31,20 @@ import Simulation.Aivika.Unboxed import qualified Simulation.Aivika.Vector.Unboxed as UV --- | The 'MonadIO' based monad is an instance of 'MonadVar'.-instance (Monad m, MonadDES m, MonadIO m, MonadTemplate m, Unboxed a) => MonadVar m a where+-- | The 'IO' monad can be an instance of 'MonadVar'.+instance Unboxed a => MonadVar IO a where+-- instance (Monad m, MonadDES m, MonadIO m, MonadTemplate m, Unboxed a) => MonadVar m a where    {-# SPECIALISE instance MonadVar IO Double #-}   {-# SPECIALISE instance MonadVar IO Float #-}   {-# SPECIALISE instance MonadVar IO Int #-}    -- | A template-based implementation of the variable.-  data Var m a = +  data Var IO a =      Var { varXS    :: UV.Vector Double,           varMS    :: UV.Vector a,           varYS    :: UV.Vector a,-          varChangedSource :: SignalSource m a }+          varChangedSource :: SignalSource IO a }         {-# INLINABLE newVar #-}   newVar a =
Simulation/Aivika/Trans.hs view
@@ -57,7 +57,6 @@         module Simulation.Aivika.Trans.Stream,         module Simulation.Aivika.Trans.Stream.Random,         module Simulation.Aivika.Trans.Task,-        module Simulation.Aivika.Trans.Template,         module Simulation.Aivika.Trans.Transform,         module Simulation.Aivika.Trans.Transform.Extra,         module Simulation.Aivika.Trans.Transform.Memo.Unboxed,@@ -108,7 +107,6 @@ import Simulation.Aivika.Trans.Stream import Simulation.Aivika.Trans.Stream.Random import Simulation.Aivika.Trans.Task-import Simulation.Aivika.Trans.Template import Simulation.Aivika.Trans.Transform import Simulation.Aivika.Trans.Transform.Extra import Simulation.Aivika.Trans.Transform.Memo.Unboxed
Simulation/Aivika/Trans/DoubleLinkedList.hs view
@@ -18,9 +18,17 @@         listAddLast,         listRemoveFirst,         listRemoveLast,+        listRemove,+        listRemoveBy,+        listContains,+        listContainsBy,         listFirst,-        listLast) where +        listLast,+        clearList,+        freezeList) where  +import Data.Maybe+ import Control.Monad  import Simulation.Aivika.Trans.Ref.Base@@ -175,3 +183,74 @@          error "Empty list: listLast"        Just t ->          return $ itemVal t++-- | Remove the specified element from the list and return a flag+-- indicating whether the element was found and removed.+listRemove :: (Eq a, MonadRef m) => DoubleLinkedList m a -> a -> Event m Bool+{-# INLINABLE listRemove #-}+listRemove x v = fmap isJust $ listRemoveBy x (== v)++-- | Remove an element satisfying the specified predicate and return+-- the element if found.+listRemoveBy :: MonadRef m => DoubleLinkedList m a -> (a -> Bool) -> Event m (Maybe a)+{-# INLINABLE listRemoveBy #-}+listRemoveBy x p = readRef (listHead x) >>= loop+  where loop item =+          case item of+            Nothing   -> return Nothing+            Just item ->+              do let f = p (itemVal item)+                 if not f+                   then readRef (itemNext item) >>= loop+                   else do size <- readRef (listSize x)+                           prev <- readRef (itemPrev item)+                           next <- readRef (itemNext item)+                           writeRef (listSize x) (size - 1)+                           case (prev, next) of+                             (Nothing, Nothing) ->+                               do writeRef (listHead x) Nothing+                                  writeRef (listTail x) Nothing+                             (Nothing, head' @ (Just item')) ->+                               do writeRef (itemPrev item') Nothing+                                  writeRef (listHead x) head'+                             (tail' @ (Just item'), Nothing) ->+                               do writeRef (itemNext item') Nothing+                                  writeRef (listTail x) tail'+                             (Just prev', Just next') ->+                               do writeRef (itemNext prev') (Just next')+                                  writeRef (itemPrev next') (Just prev')+                           return (Just $ itemVal item)++-- | Detect whether the specified element is contained in the list.+listContains :: (Eq a, MonadRef m) => DoubleLinkedList m a -> a -> Event m Bool+{-# INLINABLE listContains #-}+listContains x v = fmap isJust $ listContainsBy x (== v)++-- | Detect whether an element satisfying the specified predicate is contained in the list.+listContainsBy :: MonadRef m => DoubleLinkedList m a -> (a -> Bool) -> Event m (Maybe a)+{-# INLINABLE listContainsBy #-}+listContainsBy x p = readRef (listHead x) >>= loop+  where loop item =+          case item of+            Nothing   -> return Nothing+            Just item ->+              do let f = p (itemVal item)+                 if not f+                   then readRef (itemNext item) >>= loop+                   else return $ Just (itemVal item)++-- | Clear the contents of the list.+clearList :: MonadRef m => DoubleLinkedList m a -> Event m ()+{-# INLINABLE clearList #-}+clearList q =+  do writeRef (listHead q) Nothing+     writeRef (listTail q) Nothing+     writeRef (listSize q) 0++-- | Freeze the list and return its contents.+freezeList :: MonadRef m => DoubleLinkedList m a -> Event m [a]+{-# INLINABLE freezeList #-}+freezeList x = readRef (listTail x) >>= loop []+  where loop acc Nothing     = return acc+        loop acc (Just item) = readRef (itemPrev item) >>= loop (itemVal item : acc)+  
Simulation/Aivika/Trans/Net.hs view
@@ -106,15 +106,13 @@   {-# INLINABLE (***) #-}   (Net f) *** (Net g) =     Net $ \(b, b') ->-    do (c, p1) <- f b-       (c', p2) <- g b'+    do ((c, p1), (c', p2)) <- zipProcessParallel (f b) (g b')        return ((c, c'), p1 *** p2)           {-# INLINABLE (&&&) #-}   (Net f) &&& (Net g) =     Net $ \b ->-    do (c, p1) <- f b-       (c', p2) <- g b+    do ((c, p1), (c', p2)) <- zipProcessParallel (f b) (g b)        return ((c, c'), p1 &&& p2)  instance MonadDES m => ArrowChoice (Net m) where
Simulation/Aivika/Trans/Processor.hs view
@@ -97,25 +97,25 @@     Processor $ \xys ->     Cons $     do (xs, ys) <- liftSimulation $ unzipStream xys-       runStream $ zipStreamSeq (f xs) ys+       runStream $ zipStreamParallel (f xs) ys    {-# INLINABLE second #-}   second (Processor f) =     Processor $ \xys ->     Cons $     do (xs, ys) <- liftSimulation $ unzipStream xys-       runStream $ zipStreamSeq xs (f ys)+       runStream $ zipStreamParallel xs (f ys)    {-# INLINABLE (***) #-}   Processor f *** Processor g =     Processor $ \xys ->     Cons $     do (xs, ys) <- liftSimulation $ unzipStream xys-       runStream $ zipStreamSeq (f xs) (g ys)+       runStream $ zipStreamParallel (f xs) (g ys)    {-# INLINABLE (&&&) #-}   Processor f &&& Processor g =-    Processor $ \xs -> zipStreamSeq (f xs) (g xs)+    Processor $ \xs -> zipStreamParallel (f xs) (g xs)  instance MonadDES m => ArrowChoice (Processor m) where 
− Simulation/Aivika/Trans/Template.hs
@@ -1,29 +0,0 @@---- |--- Module     : Simulation.Aivika.Trans.Template--- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>--- License    : BSD3--- Maintainer : David Sorokin <david.sorokin@gmail.com>--- Stability  : experimental--- Tested with: GHC 8.0.1------ It defines explicit type sub-classes of 'IO'-based monads on top of which--- the simulation monads can be automatically generated.----module Simulation.Aivika.Trans.Template-       (MonadTemplate,-        MonadEventQueueTemplate) where--import Control.Monad.Trans---- | It defines a type class based on which the simulation computations can be automatically generated.-class Monad m => MonadTemplate m---- | It defines a type class based on which the event queue can be automatically generated.-class Monad m => MonadEventQueueTemplate m---- | An instance of the type class.-instance MonadTemplate IO---- | An instance of the type class.-instance MonadEventQueueTemplate IO
aivika-transformers.cabal view
@@ -1,5 +1,5 @@ name:            aivika-transformers-version:         4.5.1+version:         4.6 synopsis:        Transformers for the Aivika simulation library description:     This package is a generalization of the aivika [1] simulation library@@ -43,6 +43,7 @@                      examples/TimeOutWait.hs                      examples/TruckHaulingSituation.hs                      examples/WorkStationsInSeries.hs+                     CHANGELOG.md  library @@ -107,7 +108,6 @@                      Simulation.Aivika.Trans.SystemDynamics                      Simulation.Aivika.Trans.Table                      Simulation.Aivika.Trans.Task-                     Simulation.Aivika.Trans.Template                      Simulation.Aivika.Trans.Transform                      Simulation.Aivika.Trans.Transform.Extra                      Simulation.Aivika.Trans.Transform.Memo