packages feed

aivika-gpss 0.4 → 0.5

raw patch · 5 files changed

+99/−3 lines, 5 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Simulation.Aivika.GPSS.Block: processBlock :: (a -> Process b) -> Block a b
+ Simulation.Aivika.GPSS.Block.Generate: signalGeneratorBlock :: Signal (Arrival a) -> Int -> GeneratorBlock (Transact a)
+ Simulation.Aivika.GPSS.Block.Generate: signalGeneratorBlock0 :: Signal (Arrival a) -> GeneratorBlock (Transact a)
+ Simulation.Aivika.GPSS.Block.Generate: signalGeneratorBlockM :: Signal (Arrival a) -> Event Int -> GeneratorBlock (Transact a)
+ Simulation.Aivika.Trans.GPSS.Block: processBlock :: MonadDES m => (a -> Process m b) -> Block m a b
+ Simulation.Aivika.Trans.GPSS.Block.Generate: signalGeneratorBlock :: MonadDES m => Signal m (Arrival a) -> Int -> GeneratorBlock m (Transact m a)
+ Simulation.Aivika.Trans.GPSS.Block.Generate: signalGeneratorBlock0 :: MonadDES m => Signal m (Arrival a) -> GeneratorBlock m (Transact m a)
+ Simulation.Aivika.Trans.GPSS.Block.Generate: signalGeneratorBlockM :: MonadDES m => Signal m (Arrival a) -> Event m Int -> GeneratorBlock m (Transact m a)

Files

Simulation/Aivika/GPSS/Block.hs view
@@ -13,6 +13,7 @@        (Block(..),         GeneratorBlock(..),         withinBlock,+        processBlock,         traceBlock) where  import Control.Monad@@ -46,6 +47,12 @@                -> Block a a withinBlock m =   Block { blockProcess = \a -> m >> return a }++-- | Process every transact within the block.+processBlock :: (a -> Process b)+                -- ^ process the transact+                -> Block a b+processBlock = Block  -- | Trace the specified block. traceBlock :: String -> Block a b -> Block a b
Simulation/Aivika/GPSS/Block/Generate.hs view
@@ -12,7 +12,10 @@ module Simulation.Aivika.GPSS.Block.Generate        (streamGeneratorBlock0,         streamGeneratorBlock,-        streamGeneratorBlockM) where+        streamGeneratorBlockM,+        signalGeneratorBlock0,+        signalGeneratorBlock,+        signalGeneratorBlockM) where  import Simulation.Aivika import Simulation.Aivika.GPSS.Block@@ -49,3 +52,37 @@                          -- ^ the input stream of data                          -> GeneratorBlock (Transact a) streamGeneratorBlock0 s = streamGeneratorBlock s 0++-- | Return a generator block by the specified signal and priority computation.+signalGeneratorBlockM :: Signal (Arrival a)+                         -- ^ the input signal of data+                         -> Event Int+                         -- ^ the transact priority+                         -> GeneratorBlock (Transact a)+signalGeneratorBlockM s priority =+  let handle block a =+        do p <- priority+           t <- liftSimulation $ newTransact a p+           runProcess $+             do takeTransact t+                blockProcess block t+  in GeneratorBlock $ \block ->+  do h <- liftEvent $+          handleSignal s $+          handle block+     finallyProcess neverProcess+       (liftEvent $ disposeEvent h)++-- | Return a generator block by the specified signal and priority.+signalGeneratorBlock :: Signal (Arrival a)+                        -- ^ the input signal of data+                        -> Int+                        -- ^ the transact priority+                        -> GeneratorBlock (Transact a)+signalGeneratorBlock s = signalGeneratorBlockM s . return++-- | Return a generator block by the specified signal using zero priority.+signalGeneratorBlock0 :: Signal (Arrival a)+                         -- ^ the input signal of data+                         -> GeneratorBlock (Transact a)+signalGeneratorBlock0 s = signalGeneratorBlock s 0
Simulation/Aivika/Trans/GPSS/Block.hs view
@@ -13,6 +13,7 @@        (Block(..),         GeneratorBlock(..),         withinBlock,+        processBlock,         traceBlock) where  import Control.Monad@@ -50,6 +51,14 @@ {-# INLINABLE withinBlock #-} withinBlock m =   Block { blockProcess = \a -> m >> return a }++-- | Process every transact within the block.+processBlock :: MonadDES m+                => (a -> Process m b)+                -- ^ process the transact+                -> Block m a b+{-# INLINABLE processBlock #-}+processBlock = Block  -- | Trace the specified block. traceBlock :: MonadDES m => String -> Block m a b -> Block m a b
Simulation/Aivika/Trans/GPSS/Block/Generate.hs view
@@ -12,7 +12,10 @@ module Simulation.Aivika.Trans.GPSS.Block.Generate        (streamGeneratorBlock0,         streamGeneratorBlock,-        streamGeneratorBlockM) where+        streamGeneratorBlockM,+        signalGeneratorBlock0,+        signalGeneratorBlock,+        signalGeneratorBlockM) where  import Simulation.Aivika.Trans import Simulation.Aivika.Trans.GPSS.Block@@ -55,3 +58,43 @@                          -> GeneratorBlock m (Transact m a) {-# INLINABLE streamGeneratorBlock0 #-} streamGeneratorBlock0 s = streamGeneratorBlock s 0++-- | Return a generator block by the specified signal and priority computation.+signalGeneratorBlockM :: MonadDES m+                         => Signal m (Arrival a)+                         -- ^ the input signal of data+                         -> Event m Int+                         -- ^ the transact priority+                         -> GeneratorBlock m (Transact m a)+{-# INLINABLE signalGeneratorBlockM #-}+signalGeneratorBlockM s priority =+  let handle block a =+        do p <- priority+           t <- liftSimulation $ newTransact a p+           runProcess $+             do takeTransact t+                blockProcess block t+  in GeneratorBlock $ \block ->+  do h <- liftEvent $+          handleSignal s $+          handle block+     finallyProcess neverProcess+       (liftEvent $ disposeEvent h)++-- | Return a generator block by the specified signal and priority.+signalGeneratorBlock :: MonadDES m+                        => Signal m (Arrival a)+                        -- ^ the input signal of data+                        -> Int+                        -- ^ the transact priority+                        -> GeneratorBlock m (Transact m a)+{-# INLINABLE signalGeneratorBlock #-}+signalGeneratorBlock s = signalGeneratorBlockM s . return++-- | Return a generator block by the specified signal using zero priority.+signalGeneratorBlock0 :: MonadDES m+                         => Signal m (Arrival a)+                         -- ^ the input signal of data+                         -> GeneratorBlock m (Transact m a)+{-# INLINABLE signalGeneratorBlock0 #-}+signalGeneratorBlock0 s = signalGeneratorBlock s 0
aivika-gpss.cabal view
@@ -1,5 +1,5 @@ name:            aivika-gpss-version:         0.4+version:         0.5 synopsis:        GPSS-like DSL for Aivika description:     This package allows defining simulation models in terms of a GPSS-like