aivika-transformers 5.8 → 5.9
raw patch · 10 files changed
+50/−6 lines, 10 filesdep ~aivikadep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: aivika, base
API changes (from Hackage documentation)
+ Simulation.Aivika.Trans.Composite: instance GHC.Base.Monad m => Control.Monad.Fail.MonadFail (Simulation.Aivika.Trans.Composite.Composite m)
+ Simulation.Aivika.Trans.Event: -- | It represents the event queue.
+ Simulation.Aivika.Trans.Generator: -- | Defines a random number generator.
+ Simulation.Aivika.Trans.Internal.Dynamics: instance GHC.Base.Monad m => Control.Monad.Fail.MonadFail (Simulation.Aivika.Trans.Internal.Types.Dynamics m)
+ Simulation.Aivika.Trans.Internal.Event: -- | It represents the event queue.
+ Simulation.Aivika.Trans.Internal.Event: instance GHC.Base.Monad m => Control.Monad.Fail.MonadFail (Simulation.Aivika.Trans.Internal.Types.Event m)
+ Simulation.Aivika.Trans.Internal.Parameter: instance GHC.Base.Monad m => Control.Monad.Fail.MonadFail (Simulation.Aivika.Trans.Internal.Types.Parameter m)
+ Simulation.Aivika.Trans.Internal.Process: instance Simulation.Aivika.Trans.DES.MonadDES m => Control.Monad.Fail.MonadFail (Simulation.Aivika.Trans.Internal.Process.Process m)
+ Simulation.Aivika.Trans.Internal.Simulation: instance GHC.Base.Monad m => Control.Monad.Fail.MonadFail (Simulation.Aivika.Trans.Internal.Types.Simulation m)
+ Simulation.Aivika.Trans.Internal.Types: -- | It represents the event queue.
+ Simulation.Aivika.Trans.QueueStrategy: -- | The strategy queue.
+ Simulation.Aivika.Trans.Ref.Base.Lazy: -- <a>IORef</a> variable but only dependent on the event queue, which
+ Simulation.Aivika.Trans.Ref.Base.Lazy: -- allows synchronizing the reference with the model explicitly through
+ Simulation.Aivika.Trans.Ref.Base.Lazy: -- the <a>Event</a> monad.
+ Simulation.Aivika.Trans.Ref.Base.Lazy: -- | The <a>Ref</a> type represents a mutable variable similar to the
+ Simulation.Aivika.Trans.Ref.Base.Strict: -- <a>IORef</a> variable but only dependent on the event queue, which
+ Simulation.Aivika.Trans.Ref.Base.Strict: -- allows synchronizing the reference with the model explicitly through
+ Simulation.Aivika.Trans.Ref.Base.Strict: -- the <a>Event</a> monad.
+ Simulation.Aivika.Trans.Ref.Base.Strict: -- | The <a>Ref</a> type represents a mutable variable similar to the
+ Simulation.Aivika.Trans.Resource.Preemption: -- | Represents a preemptible resource.
+ Simulation.Aivika.Trans.Resource.Preemption.Base: -- | Represents a preemptible resource.
+ Simulation.Aivika.Trans.Var: --
+ Simulation.Aivika.Trans.Var: -- Because of using arrays, it would usually be a logical mistake to use
+ Simulation.Aivika.Trans.Var: -- For example, the memoised values of the variable can be used in the
+ Simulation.Aivika.Trans.Var: -- can actually be collected with a very small footprint by updating
+ Simulation.Aivika.Trans.Var: -- different time points. The <a>Var</a> variable is safe to be used in
+ Simulation.Aivika.Trans.Var: -- differential and difference equations of System Dynamics, while the
+ Simulation.Aivika.Trans.Var: -- immutable <a>SamplingStats</a> and <a>TimingStats</a> values in a
+ Simulation.Aivika.Trans.Var: -- much slower than the reference.
+ Simulation.Aivika.Trans.Var: -- mutable <tt>Ref</tt> reference.
+ Simulation.Aivika.Trans.Var: -- the variable for collecting statistics. In most cases, the statistics
+ Simulation.Aivika.Trans.Var: -- variable iself can be updated within the discrete event simulation.
+ Simulation.Aivika.Trans.Var: -- | Like the <a>Ref</a> reference but keeps the history of changes in
+ Simulation.Aivika.Trans.Var.Unboxed: --
+ Simulation.Aivika.Trans.Var.Unboxed: -- Because of using arrays, it would usually be a logical mistake to use
+ Simulation.Aivika.Trans.Var.Unboxed: -- For example, the memoised values of the variable can be used in the
+ Simulation.Aivika.Trans.Var.Unboxed: -- can actually be collected with a very small footprint by updating
+ Simulation.Aivika.Trans.Var.Unboxed: -- different time points. The <a>Var</a> variable is safe to be used in
+ Simulation.Aivika.Trans.Var.Unboxed: -- differential and difference equations of System Dynamics, while the
+ Simulation.Aivika.Trans.Var.Unboxed: -- immutable <a>SamplingStats</a> and <a>TimingStats</a> values in a
+ Simulation.Aivika.Trans.Var.Unboxed: -- much slower than the reference.
+ Simulation.Aivika.Trans.Var.Unboxed: -- mutable <tt>Ref</tt> reference.
+ Simulation.Aivika.Trans.Var.Unboxed: -- the variable for collecting statistics. In most cases, the statistics
+ Simulation.Aivika.Trans.Var.Unboxed: -- variable iself can be updated within the discrete event simulation.
+ Simulation.Aivika.Trans.Var.Unboxed: -- | Like the <a>Ref</a> reference but keeps the history of changes in
- Simulation.Aivika.Trans.Channel: Channel :: Signal m a -> Composite m (Signal m b) -> Channel m a b
+ Simulation.Aivika.Trans.Channel: Channel :: (Signal m a -> Composite m (Signal m b)) -> Channel m a b
- Simulation.Aivika.Trans.Circuit: Circuit :: a -> Event m (b, Circuit m a b) -> Circuit m a b
+ Simulation.Aivika.Trans.Circuit: Circuit :: (a -> Event m (b, Circuit m a b)) -> Circuit m a b
- Simulation.Aivika.Trans.Dynamics.Extra: scan1Dynamics :: MonadFix m => (a -> a -> a) -> (Dynamics m a -> Simulation m (Dynamics m a)) -> (Dynamics m a -> Simulation m (Dynamics m a))
+ Simulation.Aivika.Trans.Dynamics.Extra: scan1Dynamics :: MonadFix m => (a -> a -> a) -> (Dynamics m a -> Simulation m (Dynamics m a)) -> Dynamics m a -> Simulation m (Dynamics m a)
- Simulation.Aivika.Trans.Dynamics.Extra: scanDynamics :: MonadFix m => (a -> b -> a) -> a -> (Dynamics m a -> Simulation m (Dynamics m a)) -> (Dynamics m b -> Simulation m (Dynamics m a))
+ Simulation.Aivika.Trans.Dynamics.Extra: scanDynamics :: MonadFix m => (a -> b -> a) -> a -> (Dynamics m a -> Simulation m (Dynamics m a)) -> Dynamics m b -> Simulation m (Dynamics m a)
- Simulation.Aivika.Trans.Generator: CustomGenerator :: (m (Generator m)) -> GeneratorType m
+ Simulation.Aivika.Trans.Generator: CustomGenerator :: m (Generator m) -> GeneratorType m
- Simulation.Aivika.Trans.Generator: CustomGenerator01 :: (m Double) -> GeneratorType m
+ Simulation.Aivika.Trans.Generator: CustomGenerator01 :: m Double -> GeneratorType m
- Simulation.Aivika.Trans.Internal.Simulation: [SimulationException] :: SimulationException
+ Simulation.Aivika.Trans.Internal.Simulation: [SimulationException] :: forall e. Exception e => e -> SimulationException
- Simulation.Aivika.Trans.Net: Net :: a -> Process m (b, Net m a b) -> Net m a b
+ Simulation.Aivika.Trans.Net: Net :: (a -> Process m (b, Net m a b)) -> Net m a b
- Simulation.Aivika.Trans.Processor: Processor :: Stream m a -> Stream m b -> Processor m a b
+ Simulation.Aivika.Trans.Processor: Processor :: (Stream m a -> Stream m b) -> Processor m a b
- Simulation.Aivika.Trans.Processor: queuedProcessorChannel :: MonadDES m => (a -> Event m ()) -> (Process m a) -> Processor m a b -> Channel m a b
+ Simulation.Aivika.Trans.Processor: queuedProcessorChannel :: MonadDES m => (a -> Event m ()) -> Process m a -> Processor m a b -> Channel m a b
- Simulation.Aivika.Trans.Results: ResultArrayWithSubscript :: (Array i p) -> (Array i String) -> ResultArrayWithSubscript i p
+ Simulation.Aivika.Trans.Results: ResultArrayWithSubscript :: Array i p -> Array i String -> ResultArrayWithSubscript i p
- Simulation.Aivika.Trans.Results: ResultItem :: (a m) -> ResultItem m
+ Simulation.Aivika.Trans.Results: ResultItem :: a m -> ResultItem m
- Simulation.Aivika.Trans.Results: ResultItemSource :: (ResultItem m) -> ResultSource m
+ Simulation.Aivika.Trans.Results: ResultItemSource :: ResultItem m -> ResultSource m
- Simulation.Aivika.Trans.Results: ResultObjectSource :: (ResultObject m) -> ResultSource m
+ Simulation.Aivika.Trans.Results: ResultObjectSource :: ResultObject m -> ResultSource m
- Simulation.Aivika.Trans.Results: ResultSignal :: (Signal m ()) -> ResultSignal m
+ Simulation.Aivika.Trans.Results: ResultSignal :: Signal m () -> ResultSignal m
- Simulation.Aivika.Trans.Results: ResultSignalMix :: (Signal m ()) -> ResultSignal m
+ Simulation.Aivika.Trans.Results: ResultSignalMix :: Signal m () -> ResultSignal m
- Simulation.Aivika.Trans.Results: ResultVectorSource :: (ResultVector m) -> ResultSource m
+ Simulation.Aivika.Trans.Results: ResultVectorSource :: ResultVector m -> ResultSource m
- Simulation.Aivika.Trans.Results: ResultVectorWithSubscript :: (Vector p) -> (Vector String) -> ResultVectorWithSubscript p
+ Simulation.Aivika.Trans.Results: ResultVectorWithSubscript :: Vector p -> Vector String -> ResultVectorWithSubscript p
- Simulation.Aivika.Trans.Results.Locale: ResultLocalisation :: ResultId -> ResultDescription -> ResultId -> ResultDescription -> ResultLocalisation
+ Simulation.Aivika.Trans.Results.Locale: ResultLocalisation :: (ResultId -> ResultDescription) -> (ResultId -> ResultDescription) -> ResultLocalisation
- Simulation.Aivika.Trans.Results.Locale.Types: ResultLocalisation :: ResultId -> ResultDescription -> ResultId -> ResultDescription -> ResultLocalisation
+ Simulation.Aivika.Trans.Results.Locale.Types: ResultLocalisation :: (ResultId -> ResultDescription) -> (ResultId -> ResultDescription) -> ResultLocalisation
- Simulation.Aivika.Trans.Results.Transform: Activity :: (ResultTransform m) -> Activity 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: ArrivalTimer :: ResultTransform m -> ArrivalTimer m
- Simulation.Aivika.Trans.Results.Transform: Operation :: (ResultTransform m) -> Operation 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: Queue :: ResultTransform m -> Queue m
- Simulation.Aivika.Trans.Results.Transform: Resource :: (ResultTransform m) -> Resource 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: SamplingCounter :: ResultTransform m -> SamplingCounter m
- Simulation.Aivika.Trans.Results.Transform: SamplingStats :: (ResultTransform m) -> SamplingStats 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: Server :: ResultTransform m -> Server m
- Simulation.Aivika.Trans.Results.Transform: TimingCounter :: (ResultTransform m) -> TimingCounter 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: TimingStats :: ResultTransform m -> TimingStats m
- Simulation.Aivika.Trans.Signal: Signal :: (a -> Event m ()) -> Event m (DisposableEvent m) -> Signal m a
+ Simulation.Aivika.Trans.Signal: Signal :: ((a -> Event m ()) -> Event m (DisposableEvent m)) -> Signal m a
- Simulation.Aivika.Trans.Simulation: [SimulationException] :: SimulationException
+ Simulation.Aivika.Trans.Simulation: [SimulationException] :: forall e. Exception e => e -> SimulationException
- Simulation.Aivika.Trans.Statistics: combineSamplingStatsEither :: SamplingData a => Either a SamplingStats a -> SamplingStats a -> SamplingStats a
+ Simulation.Aivika.Trans.Statistics: combineSamplingStatsEither :: SamplingData a => Either a (SamplingStats a) -> SamplingStats a -> SamplingStats a
- Simulation.Aivika.Trans.Transform: Transform :: Dynamics m a -> Simulation m (Dynamics m b) -> Transform m a b
+ Simulation.Aivika.Trans.Transform: Transform :: (Dynamics m a -> Simulation m (Dynamics m b)) -> Transform m a b
Files
- CHANGELOG.md +6/−0
- Simulation/Aivika/Trans/Agent.hs +4/−2
- Simulation/Aivika/Trans/Composite.hs +6/−0
- Simulation/Aivika/Trans/Internal/Dynamics.hs +6/−0
- Simulation/Aivika/Trans/Internal/Event.hs +6/−0
- Simulation/Aivika/Trans/Internal/Parameter.hs +6/−0
- Simulation/Aivika/Trans/Internal/Process.hs +6/−0
- Simulation/Aivika/Trans/Internal/Simulation.hs +6/−0
- Simulation/Aivika/Trans/Stream/Random.hs +1/−1
- aivika-transformers.cabal +3/−3
CHANGELOG.md view
@@ -1,4 +1,10 @@ +Version 5.9+-----++* Added the support of GHC 8.6 and dropped the support of old versions+ that do not have Monad.Fail.+ Version 5.8 -----
Simulation/Aivika/Trans/Agent.hs view
@@ -222,8 +222,10 @@ "Use the setStateTransition function to define " ++ "the transition state: activateState." ProcessingMode ->- do x0 @ (Just st0) <- invokeEvent p $ readRef (agentStateRef agent)- invokeEvent p $ traversePath x0 st+ do x0 <- invokeEvent p $ readRef (agentStateRef agent)+ case x0 of+ Just st0 -> invokeEvent p $ traversePath x0 st+ Nothing -> error "Pattern match failed: selectState" -- | Set the activation computation for the specified state. setStateActivation :: MonadDES m => AgentState m -> Event m () -> Event m ()
Simulation/Aivika/Trans/Composite.hs view
@@ -28,6 +28,7 @@ import Control.Monad import Control.Monad.Trans import Control.Monad.Fix+import Control.Monad.Fail import Control.Applicative import Simulation.Aivika.Trans.Comp@@ -96,6 +97,11 @@ let Composite m' = k a (b, h') <- m' h return (b, h')++instance Monad m => MonadFail (Composite m) where++ {-# INLINE fail #-}+ fail = error instance (Monad m, MonadIO (Event m)) => MonadIO (Composite m) where
Simulation/Aivika/Trans/Internal/Dynamics.hs view
@@ -37,6 +37,7 @@ import Control.Monad import Control.Monad.Trans import Control.Monad.Fix+import Control.Monad.Fail import qualified Control.Monad.Catch as MC import Control.Applicative @@ -103,6 +104,11 @@ {-# INLINE (<*>) #-} (Dynamics x) <*> (Dynamics y) = Dynamics $ \p -> x p <*> y p++instance Monad m => MonadFail (Dynamics m) where++ {-# INLINE fail #-}+ fail = error liftMD :: Monad m => (a -> b) -> Dynamics m a -> Dynamics m b {-# INLINE liftMD #-}
Simulation/Aivika/Trans/Internal/Event.hs view
@@ -62,6 +62,7 @@ import Control.Monad import Control.Monad.Trans import Control.Monad.Fix+import Control.Monad.Fail import qualified Control.Monad.Catch as MC import Control.Applicative @@ -101,6 +102,11 @@ {-# INLINE (<*>) #-} (Event x) <*> (Event y) = Event $ \p -> x p <*> y p++instance Monad m => MonadFail (Event m) where++ {-# INLINE fail #-}+ fail = error instance MonadTrans Event where
Simulation/Aivika/Trans/Internal/Parameter.hs view
@@ -45,6 +45,7 @@ import Control.Monad import Control.Monad.Trans import Control.Monad.Fix+import Control.Monad.Fail import qualified Control.Monad.Catch as MC import Control.Applicative @@ -129,6 +130,11 @@ {-# INLINE (<*>) #-} (Parameter x) <*> (Parameter y) = Parameter $ \r -> x r <*> y r++instance Monad m => MonadFail (Parameter m) where++ {-# INLINE fail #-}+ fail = error liftMP :: Monad m => (a -> b) -> Parameter m a -> Parameter m b {-# INLINE liftMP #-}
Simulation/Aivika/Trans/Internal/Process.hs view
@@ -100,6 +100,7 @@ import Control.Exception import Control.Monad import Control.Monad.Trans+import Control.Monad.Fail import qualified Control.Monad.Catch as MC import Control.Applicative @@ -499,6 +500,11 @@ {-# INLINE (<*>) #-} (Process x) <*> (Process y) = Process $ \pid -> x pid <*> y pid++instance MonadDES m => MonadFail (Process m) where++ {-# INLINE fail #-}+ fail = error instance (MonadDES m, MonadIO m) => MonadIO (Process m) where
Simulation/Aivika/Trans/Internal/Simulation.hs view
@@ -33,6 +33,7 @@ import Control.Monad import Control.Monad.Trans import Control.Monad.Fix+import Control.Monad.Fail import qualified Control.Monad.Catch as MC import Control.Applicative @@ -116,6 +117,11 @@ {-# INLINE (<*>) #-} (Simulation x) <*> (Simulation y) = Simulation $ \r -> x r <*> y r++instance Monad m => MonadFail (Simulation m) where++ {-# INLINE fail #-}+ fail = error liftMS :: Monad m => (a -> b) -> Simulation m a -> Simulation m b {-# INLINE liftMS #-}
Simulation/Aivika/Trans/Stream/Random.hs view
@@ -45,7 +45,7 @@ import Simulation.Aivika.Trans.Ref import Simulation.Aivika.Trans.Arrival --- | Return a sream of random events that arrive with the specified delay.+-- | Return a stream of random events that arrive with the specified delay. randomStream :: MonadDES m => Parameter m (Double, a) -- ^ compute a pair of the delay and event of type @a@
aivika-transformers.cabal view
@@ -1,5 +1,5 @@ name: aivika-transformers-version: 5.8+version: 5.9 synopsis: Transformers for the Aivika simulation library description: This package is a generalization of the aivika [1] simulation library@@ -168,7 +168,7 @@ Simulation.Aivika.IO.Var Simulation.Aivika.IO.Var.Unboxed - build-depends: base >= 4.6.0.0 && < 6,+ build-depends: base >= 4.9.0.0 && < 6, mtl >= 2.1.1, array >= 0.3.0.0, containers >= 0.4.0.0,@@ -177,7 +177,7 @@ vector >= 0.10.0.1, semigroups >= 0.10, exceptions >= 0.9.0,- aivika >= 5.8+ aivika >= 5.9 other-extensions: FlexibleContexts, FlexibleInstances,