packages feed

aivika 5.5 → 5.6

raw patch · 9 files changed

+84/−44 lines, 9 filesdep +semigroupsPVP ok

version bump matches the API change (PVP)

Dependencies added: semigroups

API changes (from Hackage documentation)

- Simulation.Aivika.Signal: instance GHC.Base.Monoid a => GHC.Base.Monoid (Simulation.Aivika.Signal.Signalable a)
+ Simulation.Aivika.Internal.Event: instance Data.Semigroup.Semigroup Simulation.Aivika.Internal.Event.DisposableEvent
+ Simulation.Aivika.Results: instance Data.Semigroup.Semigroup Simulation.Aivika.Results.ResultSignal
+ Simulation.Aivika.Results: instance Data.Semigroup.Semigroup Simulation.Aivika.Results.Results
+ Simulation.Aivika.Signal: instance (GHC.Base.Monoid a, Data.Semigroup.Semigroup a) => GHC.Base.Monoid (Simulation.Aivika.Signal.Signalable a)
+ Simulation.Aivika.Signal: instance Data.Semigroup.Semigroup (Simulation.Aivika.Signal.Signal a)
+ Simulation.Aivika.Signal: instance Data.Semigroup.Semigroup a => Data.Semigroup.Semigroup (Simulation.Aivika.Signal.Signalable a)
+ Simulation.Aivika.Statistics: instance Simulation.Aivika.Statistics.SamplingData a => Data.Semigroup.Semigroup (Simulation.Aivika.Statistics.SamplingStats a)
+ Simulation.Aivika.Stream: instance Data.Semigroup.Semigroup (Simulation.Aivika.Stream.Stream a)
- Simulation.Aivika.QueueStrategy: class DequeueStrategy s => DeletingQueueStrategy s where strategyQueueDelete s i = fmap isJust $ strategyQueueDeleteBy s (== i) strategyQueueContains s i = fmap isJust $ strategyQueueContainsBy s (== i)
+ Simulation.Aivika.QueueStrategy: class DequeueStrategy s => DeletingQueueStrategy s
- Simulation.Aivika.QueueStrategy: class QueueStrategy s where data StrategyQueue s :: * -> * where {
+ Simulation.Aivika.QueueStrategy: class QueueStrategy s where {
- Simulation.Aivika.Results: class ResultProvider p 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.Results: class ResultProvider p
- Simulation.Aivika.Signal: appendSignalable :: Monoid a => Signalable a -> Signalable a -> Signalable a
+ Simulation.Aivika.Signal: appendSignalable :: Semigroup a => Signalable a -> Signalable a -> Signalable a
- Simulation.Aivika.Unboxed: class MArray IOUArray e IO => Unboxed e where newUnboxedArray_ = newArray_
+ Simulation.Aivika.Unboxed: class MArray IOUArray e IO => Unboxed e

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/Internal/Event.hs view
@@ -60,7 +60,8 @@         traceEvent) where  import Data.IORef-import Data.Monoid+import Data.Monoid hiding ((<>))+import Data.Semigroup (Semigroup(..))  import Control.Exception import Control.Monad@@ -423,10 +424,13 @@                     -- ^ Dispose something within the 'Event' computation.                   } +instance Semigroup DisposableEvent where+  DisposableEvent x <> DisposableEvent y = DisposableEvent $ x >> y+ instance Monoid DisposableEvent where    mempty = DisposableEvent $ return ()-  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.
Simulation/Aivika/Results.hs view
@@ -109,7 +109,8 @@  import Data.Ix import Data.Maybe-import Data.Monoid+import Data.Monoid hiding ((<>))+import Data.Semigroup (Semigroup(..))  import Simulation.Aivika.Parameter import Simulation.Aivika.Simulation@@ -607,27 +608,29 @@                   | ResultSignalMix (Signal ())                     -- ^ When the specified signal was combined with unknown signal. -instance Monoid ResultSignal where+instance Semigroup ResultSignal where+  (<>) EmptyResultSignal z = z -  mempty = EmptyResultSignal+  (<>) UnknownResultSignal EmptyResultSignal = UnknownResultSignal+  (<>) UnknownResultSignal UnknownResultSignal = UnknownResultSignal+  (<>) UnknownResultSignal (ResultSignal x) = ResultSignalMix x+  (<>) UnknownResultSignal z@(ResultSignalMix x) = z -  mappend EmptyResultSignal z = 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) -  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)+  (<>) 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 Monoid ResultSignal where++  mempty = EmptyResultSignal+  mappend = (<>)+ -- | Construct a new result signal by the specified optional pure signal. maybeResultSignal :: Maybe (Signal ()) -> ResultSignal maybeResultSignal (Just x) = ResultSignal x@@ -1099,11 +1102,13 @@          return ResultPredefinedSignals { resultSignalInIntegTimes = signalInIntegTimes,                                           resultSignalInStartTime  = signalInStartTime,                                           resultSignalInStopTime   = signalInStopTime }+instance Semigroup Results where+  x <> y = results $ resultSourceList x <> resultSourceList y  instance Monoid Results where -  mempty      = results mempty-  mappend x y = results $ resultSourceList x <> resultSourceList y+  mempty  = results mempty+  mappend = (<>)  -- | Prepare the simulation results. results :: [ResultSource] -> Results
Simulation/Aivika/Signal.hs view
@@ -60,7 +60,9 @@         traceSignal) where  import Data.IORef-import Data.Monoid+import Data.Monoid hiding ((<>))+import Data.Semigroup (Semigroup(..))+import Data.List.NonEmpty (NonEmpty((:|))) import Data.List import Data.Array @@ -167,21 +169,26 @@  instance Functor Signal where   fmap = mapSignal-  ++instance Semigroup (Signal a) where+  (<>) = merge2Signals++  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 Monoid (Signal a) where       mempty = emptySignal   -  mappend = merge2Signals+  mappend = (<>)      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 (h : t) = sconcat (h :| t)    -- | Map the signal according the specified function. mapSignal :: (a -> b) -> Signal a -> Signal b@@ -385,10 +392,13 @@ instance Functor Signalable where   fmap f x = x { readSignalable = fmap f (readSignalable x) } -instance Monoid a => Monoid (Signalable a) where+instance Semigroup a => Semigroup (Signalable a) where+  (<>) = appendSignalable +instance (Monoid a, Semigroup a) => Monoid (Signalable a) where+   mempty = emptySignalable-  mappend = appendSignalable+  mappend = (<>)  -- | Return an identity. emptySignalable :: Monoid a => Signalable a@@ -397,7 +407,7 @@                signalableChanged_ = mempty }  -- | An associative operation.-appendSignalable :: Monoid a => Signalable a -> Signalable a -> Signalable a+appendSignalable :: Semigroup a => Signalable a -> Signalable a -> Signalable a appendSignalable m1 m2 =   Signalable { readSignalable = liftM2 (<>) (readSignalable m1) (readSignalable m2),                signalableChanged_ = (signalableChanged_ m1) <> (signalableChanged_ m2) }
Simulation/Aivika/Statistics.hs view
@@ -50,7 +50,8 @@  import Control.DeepSeq -import Data.Monoid+import Data.Monoid hiding ((<>))+import Data.Semigroup (Semigroup(..)) import Data.Typeable import Data.Binary @@ -97,11 +98,14 @@   -- | Combine two statistics.   combineSamplingStats :: SamplingStats a -> SamplingStats a -> SamplingStats a +instance SamplingData a => Semigroup (SamplingStats a) where+  (<>) = combineSamplingStats+ instance SamplingData a => Monoid (SamplingStats a) where       mempty = emptySamplingStats   -  mappend = combineSamplingStats+  mappend = (<>)  instance SamplingData Double where 
Simulation/Aivika/Stream.hs view
@@ -83,7 +83,9 @@  import Data.IORef 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@@ -123,11 +125,17 @@    (<|>) = mergeStreams +instance Semigroup (Stream a) where++  (<>) = mergeStreams++  sconcat (h :| t) = concatStreams (h : t)+ instance Monoid (Stream a) where    mempty  = emptyStream -  mappend = mergeStreams+  mappend = (<>)    mconcat = concatStreams 
Simulation/Aivika/SystemDynamics.hs view
@@ -660,6 +660,7 @@ --  -- | Return the delayed value using the specified lag time.+-- This function is less accurate than 'delayByDT'. delay :: Dynamics a          -- ^ the value to delay          -> Dynamics Double  -- ^ the lag time          -> Dynamics a       -- ^ the delayed value@@ -688,6 +689,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 :: Dynamics a          -- ^ the value to delay           -> Dynamics Double  -- ^ the lag time           -> Dynamics a       -- ^ the initial value
aivika.cabal view
@@ -1,5 +1,5 @@ name:            aivika-version:         5.5+version:         5.6 synopsis:        A multi-method simulation library description:     Aivika is a discrete event simulation (DES) framework with support of activity-oriented,@@ -238,7 +238,8 @@                      mwc-random >= 0.13.0.0,                      vector >= 0.10.0.1,                      deepseq >= 1.1.0.0,-                     binary >= 0.6.4.0+                     binary >= 0.6.4.0,+                     semigroups >= 0.10      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