packages feed

aivika-transformers 5.5 → 5.6

raw patch · 8 files changed

+89/−41 lines, 8 filesdep +semigroupsdep ~aivikaPVP ok

version bump matches the API change (PVP)

Dependencies added: semigroups

Dependency ranges changed: aivika

API changes (from Hackage documentation)

- Simulation.Aivika.Trans.Signal: instance (Simulation.Aivika.Trans.DES.MonadDES m, GHC.Base.Monoid a) => GHC.Base.Monoid (Simulation.Aivika.Trans.Signal.Signalable m a)
+ Simulation.Aivika.Trans.Internal.Event: instance GHC.Base.Monad m => Data.Semigroup.Semigroup (Simulation.Aivika.Trans.Internal.Event.DisposableEvent m)
+ Simulation.Aivika.Trans.Results: instance Data.Semigroup.Semigroup (Simulation.Aivika.Trans.Results.Results m)
+ Simulation.Aivika.Trans.Results: instance Simulation.Aivika.Trans.DES.MonadDES m => Data.Semigroup.Semigroup (Simulation.Aivika.Trans.Results.ResultSignal m)
+ Simulation.Aivika.Trans.Signal: instance (Simulation.Aivika.Trans.DES.MonadDES m, Data.Semigroup.Semigroup a) => Data.Semigroup.Semigroup (Simulation.Aivika.Trans.Signal.Signalable m a)
+ Simulation.Aivika.Trans.Signal: instance (Simulation.Aivika.Trans.DES.MonadDES m, GHC.Base.Monoid a, Data.Semigroup.Semigroup a) => GHC.Base.Monoid (Simulation.Aivika.Trans.Signal.Signalable m a)
+ Simulation.Aivika.Trans.Signal: instance Simulation.Aivika.Trans.DES.MonadDES m => Data.Semigroup.Semigroup (Simulation.Aivika.Trans.Signal.Signal m a)
+ Simulation.Aivika.Trans.Stream: instance Simulation.Aivika.Trans.DES.MonadDES m => Data.Semigroup.Semigroup (Simulation.Aivika.Trans.Stream.Stream m a)
- Simulation.Aivika.Trans.Event: class EventQueueing m where data EventQueue m :: * runEvent = runEventWith CurrentEvents where {
+ Simulation.Aivika.Trans.Event: class EventQueueing m where {
- Simulation.Aivika.Trans.Generator: class (Functor m, Monad m) => MonadGenerator m where data Generator m :: * where {
+ Simulation.Aivika.Trans.Generator: class (Functor m, Monad m) => MonadGenerator m where {
- Simulation.Aivika.Trans.Internal.Event: class EventQueueing m where data EventQueue m :: * runEvent = runEventWith CurrentEvents where {
+ Simulation.Aivika.Trans.Internal.Event: class EventQueueing m where {
- Simulation.Aivika.Trans.Internal.Types: class EventQueueing m where data EventQueue m :: * runEvent = runEventWith CurrentEvents where {
+ Simulation.Aivika.Trans.Internal.Types: class EventQueueing m where {
- Simulation.Aivika.Trans.QueueStrategy: class DequeueStrategy m s => DeletingQueueStrategy m s where strategyQueueDelete s a = Event $ \ p -> do { x <- invokeEvent p $ strategyQueueDeleteBy s (== a); return (isJust x) } strategyQueueContains s a = Event $ \ p -> do { x <- invokeEvent p $ strategyQueueContainsBy s (== a); return (isJust x) }
+ Simulation.Aivika.Trans.QueueStrategy: class DequeueStrategy m s => DeletingQueueStrategy m s
- Simulation.Aivika.Trans.QueueStrategy: class Monad m => QueueStrategy m s where data StrategyQueue m s :: * -> * where {
+ Simulation.Aivika.Trans.QueueStrategy: class Monad m => QueueStrategy m s where {
- Simulation.Aivika.Trans.Ref.Base.Lazy: class Monad m => MonadRef m where data Ref m a where {
+ Simulation.Aivika.Trans.Ref.Base.Lazy: class Monad m => MonadRef m where {
- Simulation.Aivika.Trans.Ref.Base.Strict: class Monad m => MonadRef m where data Ref m a where {
+ Simulation.Aivika.Trans.Ref.Base.Strict: class Monad m => MonadRef m where {
- Simulation.Aivika.Trans.Resource.Preemption: class MonadDES m => MonadResource m where data Resource m where {
+ Simulation.Aivika.Trans.Resource.Preemption: class MonadDES m => MonadResource m where {
- Simulation.Aivika.Trans.Resource.Preemption.Base: class MonadDES m => MonadResource m where data Resource m where {
+ Simulation.Aivika.Trans.Resource.Preemption.Base: class MonadDES m => MonadResource m where {
- Simulation.Aivika.Trans.Results: class MonadDES m => ResultProvider p m | p -> m where resultSource name descr = resultSource' name [name] i [i] where i = (UserDefinedResultId $ UserDefinedResult name descr title) title = resultNameToTitle name resultSource3 name descr title = resultSource' name [name] i [i] where i = (UserDefinedResultId $ UserDefinedResult name descr title)
+ Simulation.Aivika.Trans.Results: class MonadDES m => ResultProvider p m | p -> m
- Simulation.Aivika.Trans.Signal: appendSignalable :: (MonadDES m, Monoid a) => Signalable m a -> Signalable m a -> Signalable m a
+ Simulation.Aivika.Trans.Signal: appendSignalable :: (MonadDES m, Semigroup a) => Signalable m a -> Signalable m a -> Signalable m a
- Simulation.Aivika.Trans.Statistics: SamplingStats :: ~Int -> ~a -> ~a -> ~Double -> ~Double -> SamplingStats a
+ Simulation.Aivika.Trans.Statistics: SamplingStats :: !Int -> !a -> !a -> !Double -> !Double -> SamplingStats a
- Simulation.Aivika.Trans.Statistics: TimingStats :: ~Int -> ~a -> ~a -> ~a -> ~Double -> ~Double -> ~Double -> ~Double -> ~Double -> ~Double -> TimingStats a
+ Simulation.Aivika.Trans.Statistics: TimingStats :: !Int -> !a -> !a -> !a -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> TimingStats a
- Simulation.Aivika.Trans.Statistics: [samplingStatsCount] :: SamplingStats a -> ~Int
+ Simulation.Aivika.Trans.Statistics: [samplingStatsCount] :: SamplingStats a -> !Int
- Simulation.Aivika.Trans.Statistics: [samplingStatsMax] :: SamplingStats a -> ~a
+ Simulation.Aivika.Trans.Statistics: [samplingStatsMax] :: SamplingStats a -> !a
- Simulation.Aivika.Trans.Statistics: [samplingStatsMean2] :: SamplingStats a -> ~Double
+ Simulation.Aivika.Trans.Statistics: [samplingStatsMean2] :: SamplingStats a -> !Double
- Simulation.Aivika.Trans.Statistics: [samplingStatsMean] :: SamplingStats a -> ~Double
+ Simulation.Aivika.Trans.Statistics: [samplingStatsMean] :: SamplingStats a -> !Double
- Simulation.Aivika.Trans.Statistics: [samplingStatsMin] :: SamplingStats a -> ~a
+ Simulation.Aivika.Trans.Statistics: [samplingStatsMin] :: SamplingStats a -> !a
- Simulation.Aivika.Trans.Statistics: [timingStatsCount] :: TimingStats a -> ~Int
+ Simulation.Aivika.Trans.Statistics: [timingStatsCount] :: TimingStats a -> !Int
- Simulation.Aivika.Trans.Statistics: [timingStatsLastTime] :: TimingStats a -> ~Double
+ Simulation.Aivika.Trans.Statistics: [timingStatsLastTime] :: TimingStats a -> !Double
- Simulation.Aivika.Trans.Statistics: [timingStatsLast] :: TimingStats a -> ~a
+ Simulation.Aivika.Trans.Statistics: [timingStatsLast] :: TimingStats a -> !a
- Simulation.Aivika.Trans.Statistics: [timingStatsMaxTime] :: TimingStats a -> ~Double
+ Simulation.Aivika.Trans.Statistics: [timingStatsMaxTime] :: TimingStats a -> !Double
- Simulation.Aivika.Trans.Statistics: [timingStatsMax] :: TimingStats a -> ~a
+ Simulation.Aivika.Trans.Statistics: [timingStatsMax] :: TimingStats a -> !a
- Simulation.Aivika.Trans.Statistics: [timingStatsMinTime] :: TimingStats a -> ~Double
+ Simulation.Aivika.Trans.Statistics: [timingStatsMinTime] :: TimingStats a -> !Double
- Simulation.Aivika.Trans.Statistics: [timingStatsMin] :: TimingStats a -> ~a
+ Simulation.Aivika.Trans.Statistics: [timingStatsMin] :: TimingStats a -> !a
- Simulation.Aivika.Trans.Statistics: [timingStatsStartTime] :: TimingStats a -> ~Double
+ Simulation.Aivika.Trans.Statistics: [timingStatsStartTime] :: TimingStats a -> !Double
- Simulation.Aivika.Trans.Statistics: [timingStatsSum2] :: TimingStats a -> ~Double
+ Simulation.Aivika.Trans.Statistics: [timingStatsSum2] :: TimingStats a -> !Double
- Simulation.Aivika.Trans.Statistics: [timingStatsSum] :: TimingStats a -> ~Double
+ Simulation.Aivika.Trans.Statistics: [timingStatsSum] :: TimingStats a -> !Double
- 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.Statistics: samplingStatsDeviation :: SamplingStats a -> Double
+ Simulation.Aivika.Trans.Statistics: samplingStatsDeviation :: () => SamplingStats a -> Double
- Simulation.Aivika.Trans.Statistics: samplingStatsVariance :: SamplingStats a -> Double
+ Simulation.Aivika.Trans.Statistics: samplingStatsVariance :: () => SamplingStats a -> Double
- Simulation.Aivika.Trans.Var: class MonadDES m => MonadVar m where data Var m a where {
+ Simulation.Aivika.Trans.Var: class MonadDES m => MonadVar m where {
- Simulation.Aivika.Trans.Var.Unboxed: class MonadDES m => MonadVar m a where data Var m a where {
+ Simulation.Aivika.Trans.Var.Unboxed: class MonadDES m => MonadVar m a where {

Files

CHANGELOG.md view
@@ -1,4 +1,9 @@ +Version 5.6+-----++* Lars Kuhtz added the support of GHC 8.4.+ Version 5.5 ----- 
Simulation/Aivika/Trans/Internal/Event.hs view
@@ -55,7 +55,8 @@         -- * Debugging         traceEvent) where -import Data.Monoid+import Data.Monoid hiding ((<>))+import Data.Semigroup (Semigroup(..))  import Control.Exception import Control.Monad@@ -316,13 +317,17 @@                     -- ^ Dispose something within the 'Event' computation.                   } +instance Monad m => Semigroup (DisposableEvent m) where+  {-# INLINE (<>) #-}+  DisposableEvent x <> DisposableEvent y = DisposableEvent $ x >> y+ instance Monad m => Monoid (DisposableEvent m) where    {-# INLINE mempty #-}   mempty = DisposableEvent $ return ()    {-# INLINE mappend #-}-  mappend (DisposableEvent x) (DisposableEvent y) = DisposableEvent $ x >> y+  mappend = (<>)  -- | Retry the current computation as possible, using the specified argument -- as a 'SimulationRetry' exception message in case of failure. It makes sense
Simulation/Aivika/Trans/Results.hs view
@@ -108,7 +108,8 @@  import Data.Ix import Data.Maybe-import Data.Monoid+import Data.Monoid hiding ((<>))+import Data.Semigroup (Semigroup(..))  import Simulation.Aivika.Trans.Parameter import Simulation.Aivika.Trans.Simulation@@ -613,26 +614,30 @@                     | ResultSignalMix (Signal m ())                       -- ^ When the specified signal was combined with unknown signal. +instance MonadDES m => Semigroup (ResultSignal m) where++  (<>) EmptyResultSignal z = z++  (<>) UnknownResultSignal EmptyResultSignal = UnknownResultSignal+  (<>) UnknownResultSignal UnknownResultSignal = UnknownResultSignal+  (<>) UnknownResultSignal (ResultSignal x) = ResultSignalMix x+  (<>) UnknownResultSignal z@(ResultSignalMix x) = z++  (<>) z@(ResultSignal x) EmptyResultSignal = z+  (<>) (ResultSignal x) UnknownResultSignal = ResultSignalMix x+  (<>) (ResultSignal x) (ResultSignal y) = ResultSignal (x <> y)+  (<>) (ResultSignal x) (ResultSignalMix y) = ResultSignalMix (x <> y)++  (<>) z@(ResultSignalMix x) EmptyResultSignal = z+  (<>) z@(ResultSignalMix x) UnknownResultSignal = z+  (<>) (ResultSignalMix x) (ResultSignal y) = ResultSignalMix (x <> y)+  (<>) (ResultSignalMix x) (ResultSignalMix y) = ResultSignalMix (x <> y)+ instance MonadDES m => Monoid (ResultSignal m) where    mempty = EmptyResultSignal -  mappend EmptyResultSignal z = z--  mappend UnknownResultSignal EmptyResultSignal = UnknownResultSignal-  mappend UnknownResultSignal UnknownResultSignal = UnknownResultSignal-  mappend UnknownResultSignal (ResultSignal x) = ResultSignalMix x-  mappend UnknownResultSignal z@(ResultSignalMix x) = z-  -  mappend z@(ResultSignal x) EmptyResultSignal = z-  mappend (ResultSignal x) UnknownResultSignal = ResultSignalMix x-  mappend (ResultSignal x) (ResultSignal y) = ResultSignal (x <> y)-  mappend (ResultSignal x) (ResultSignalMix y) = ResultSignalMix (x <> y)-  -  mappend z@(ResultSignalMix x) EmptyResultSignal = z-  mappend z@(ResultSignalMix x) UnknownResultSignal = z-  mappend (ResultSignalMix x) (ResultSignal y) = ResultSignalMix (x <> y)-  mappend (ResultSignalMix x) (ResultSignalMix y) = ResultSignalMix (x <> y)+  mappend = (<>)  -- | Construct a new result signal by the specified optional pure signal. maybeResultSignal :: Maybe (Signal m ()) -> ResultSignal m@@ -1106,10 +1111,14 @@                                           resultSignalInStartTime  = signalInStartTime,                                           resultSignalInStopTime   = signalInStopTime } +instance Semigroup (Results m) where++  x <> y = results $ resultSourceList x <> resultSourceList y+ instance Monoid (Results m) where -  mempty      = results mempty-  mappend x y = results $ resultSourceList x <> resultSourceList y+  mempty  = results mempty+  mappend = (<>)  -- | Prepare the simulation results. results :: [ResultSource m] -> Results m
Simulation/Aivika/Trans/Signal.hs view
@@ -61,7 +61,9 @@         -- * Debugging         traceSignal) where -import Data.Monoid+import Data.Monoid hiding ((<>))+import Data.Semigroup (Semigroup(..))+import Data.List.NonEmpty (NonEmpty((:|))) import Data.List import Data.Array @@ -195,23 +197,31 @@   {-# INLINE fmap #-}   fmap = mapSignal   +instance MonadDES m => Semigroup (Signal m a) where++  {-# INLINE (<>) #-}+  (<>) = merge2Signals++  {-# INLINABLE sconcat #-}+  sconcat (x1 :| []) = x1+  sconcat (x1 :| [x2]) = merge2Signals x1 x2+  sconcat (x1 :| [x2, x3]) = merge3Signals x1 x2 x3+  sconcat (x1 :| [x2, x3, x4]) = merge4Signals x1 x2 x3 x4+  sconcat (x1 :| [x2, x3, x4, x5]) = merge5Signals x1 x2 x3 x4 x5+  sconcat (x1 :| (x2 : x3 : x4 : x5 : xs)) = +    sconcat $ merge5Signals x1 x2 x3 x4 x5 :| xs+ instance MonadDES m => Monoid (Signal m a) where     {-# INLINE mempty #-}   mempty = emptySignal    {-# INLINE mappend #-}-  mappend = merge2Signals+  mappend = (<>)    {-# INLINABLE mconcat #-}-  mconcat [] = emptySignal-  mconcat [x1] = x1-  mconcat [x1, x2] = merge2Signals x1 x2-  mconcat [x1, x2, x3] = merge3Signals x1 x2 x3-  mconcat [x1, x2, x3, x4] = merge4Signals x1 x2 x3 x4-  mconcat [x1, x2, x3, x4, x5] = merge5Signals x1 x2 x3 x4 x5-  mconcat (x1 : x2 : x3 : x4 : x5 : xs) = -    mconcat $ merge5Signals x1 x2 x3 x4 x5 : xs+  mconcat [] = mempty+  mconcat (h:t) = sconcat (h :| t)    -- | Map the signal according the specified function. mapSignal :: MonadDES m => (a -> b) -> Signal m a -> Signal m b@@ -445,13 +455,18 @@   {-# INLINE fmap #-}   fmap f x = x { readSignalable = fmap f (readSignalable x) } -instance (MonadDES m, Monoid a) => Monoid (Signalable m a) where+instance (MonadDES m, Semigroup a) => Semigroup (Signalable m a) where +  {-# INLINE (<>) #-}+  (<>) = appendSignalable++instance (MonadDES m, Monoid a, Semigroup a) => Monoid (Signalable m a) where+   {-# INLINE mempty #-}   mempty = emptySignalable    {-# INLINE mappend #-}-  mappend = appendSignalable+  mappend = (<>)  -- | Return an identity. emptySignalable :: (MonadDES m, Monoid a) => Signalable m a@@ -461,7 +476,7 @@                signalableChanged_ = mempty }  -- | An associative operation.-appendSignalable :: (MonadDES m, Monoid a) => Signalable m a -> Signalable m a -> Signalable m a+appendSignalable :: (MonadDES m, Semigroup a) => Signalable m a -> Signalable m a -> Signalable m a {-# INLINABLE appendSignalable #-} appendSignalable m1 m2 =   Signalable { readSignalable = liftM2 (<>) (readSignalable m1) (readSignalable m2),
Simulation/Aivika/Trans/Stream.hs view
@@ -84,7 +84,9 @@         traceStream) where  import Data.Maybe-import Data.Monoid+import Data.Monoid hiding ((<>))+import Data.Semigroup (Semigroup(..))+import Data.List.NonEmpty (NonEmpty((:|)))  import Control.Applicative import Control.Monad@@ -132,13 +134,21 @@   {-# INLINE (<|>) #-}   (<|>) = mergeStreams +instance MonadDES m => Semigroup (Stream m a) where++  {-# INLINE (<>) #-}+  (<>) = mergeStreams++  {-# INLINE sconcat #-}+  sconcat (h :| t) = concatStreams (h : t)+ instance MonadDES m => Monoid (Stream m a) where    {-# INLINE mempty #-}   mempty  = emptyStream    {-# INLINE mappend #-}-  mappend = mergeStreams+  mappend = (<>)    {-# INLINE mconcat #-}   mconcat = concatStreams
Simulation/Aivika/Trans/SystemDynamics.hs view
@@ -721,6 +721,7 @@ --  -- | Return the delayed value using the specified lag time.+-- This function is less accurate than 'delayByDT'. delay :: Monad m          => Dynamics m a          -- ^ the value to delay          -> Dynamics m Double     -- ^ the lag time@@ -751,6 +752,7 @@  -- | Return the delayed value using the specified lag time and initial value. -- Because of the latter, it allows creating a loop back.+-- This function is less accurate than 'delayIByDT'. delayI :: MonadSD m           => Dynamics m a                    -- ^ the value to delay           -> Dynamics m Double               -- ^ the lag time
aivika-transformers.cabal view
@@ -1,5 +1,5 @@ name:            aivika-transformers-version:         5.5+version:         5.6 synopsis:        Transformers for the Aivika simulation library description:     This package is a generalization of the aivika [1] simulation library@@ -175,7 +175,8 @@                      random >= 1.0.0.3,                      mwc-random >= 0.13.0.0,                      vector >= 0.10.0.1,-                     aivika >= 5.5+                     semigroups >= 0.10,+                     aivika >= 5.6      other-extensions:   FlexibleContexts,                         FlexibleInstances,
examples/InspectionAdjustmentStations.hs view
@@ -19,9 +19,10 @@ -- The time between arrivals of television sets to the final inspection station is uniformly  -- distributed between 3.5 and 7.5 minutes. Two inspectors work side-by-side at the final  -- inspection station. The time required to inspect a set is uniformly distributed between --- 6 and 12 minutes. On the average, 85 percent of the sets are routed to the adjustment --- station which is manned by a single worker. Adjustment of the vertical control setting --- requires between 20 and 40 minutes, uniformly distributed.+-- 6 and 12 minutes. On the average, 85 percent of the sets pass inspection and continue on+-- the packing department. The other 15 percent are routed to the adjustment station which is+-- manned by a single worker. Adjustment of the vertical control setting requires between 20+-- and 40 minutes, uniformly distributed. --  -- The inspection station and adjustor are to be simulated for 480 minutes to estimate  -- the time to process television sets through the final production stage and to determine