packages feed

aivika-transformers 5.2 → 5.3

raw patch · 17 files changed

+1095/−615 lines, 17 filesdep ~aivikaPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: aivika

API changes (from Hackage documentation)

- Simulation.Aivika.Trans.Results.Locale: instance GHC.Classes.Eq Simulation.Aivika.Trans.Results.Locale.ResultId
- Simulation.Aivika.Trans.Results.Locale: instance GHC.Classes.Ord Simulation.Aivika.Trans.Results.Locale.ResultId
- Simulation.Aivika.Trans.Results.Locale: instance GHC.Show.Show Simulation.Aivika.Trans.Results.Locale.ResultId
- Simulation.Aivika.Trans.Results.Locale: type ResultLocalisation = ResultId -> ResultDescription
+ Simulation.Aivika.Trans.Internal.Specs: timeGrid :: Specs m -> Int -> [(Int, Double)]
+ Simulation.Aivika.Trans.Results: [resultContainerIdPath] :: ResultContainer e m -> [ResultId]
+ Simulation.Aivika.Trans.Results: [resultContainerNamePath] :: ResultContainer e m -> [ResultName]
+ Simulation.Aivika.Trans.Results: [resultValueIdPath] :: ResultValue e m -> [ResultId]
+ Simulation.Aivika.Trans.Results: [resultValueNamePath] :: ResultValue e m -> [ResultName]
+ Simulation.Aivika.Trans.Results: resultItemIdPath :: ResultItemable a => a m -> [ResultId]
+ Simulation.Aivika.Trans.Results: resultItemNamePath :: ResultItemable a => a m -> [ResultName]
+ Simulation.Aivika.Trans.Results: resultSource3 :: ResultProvider p m => ResultName -> ResultDescription -> ResultDescription -> p -> ResultSource m
+ Simulation.Aivika.Trans.Results.Locale: LocalisedResult :: Map ResultLocale ResultDescription -> Map ResultLocale ResultDescription -> LocalisedResult
+ Simulation.Aivika.Trans.Results.Locale: ResultLocalisation :: (ResultId -> ResultDescription) -> (ResultId -> ResultDescription) -> ResultLocalisation
+ Simulation.Aivika.Trans.Results.Locale: UserDefinedResult :: ResultName -> ResultDescription -> ResultDescription -> UserDefinedResult
+ Simulation.Aivika.Trans.Results.Locale: [localiseResultDescription] :: ResultLocalisation -> ResultId -> ResultDescription
+ Simulation.Aivika.Trans.Results.Locale: [localiseResultTitle] :: ResultLocalisation -> ResultId -> ResultDescription
+ Simulation.Aivika.Trans.Results.Locale: [localisedResultDescriptions] :: LocalisedResult -> Map ResultLocale ResultDescription
+ Simulation.Aivika.Trans.Results.Locale: [localisedResultTitles] :: LocalisedResult -> Map ResultLocale ResultDescription
+ Simulation.Aivika.Trans.Results.Locale: [userDefinedResultDescription] :: UserDefinedResult -> ResultDescription
+ Simulation.Aivika.Trans.Results.Locale: [userDefinedResultName] :: UserDefinedResult -> ResultName
+ Simulation.Aivika.Trans.Results.Locale: [userDefinedResultTitle] :: UserDefinedResult -> ResultDescription
+ Simulation.Aivika.Trans.Results.Locale: data LocalisedResult
+ Simulation.Aivika.Trans.Results.Locale: data ResultLocalisation
+ Simulation.Aivika.Trans.Results.Locale: data UserDefinedResult
+ Simulation.Aivika.Trans.Results.Locale: localisePathResultDescription :: ResultLocalisation -> [ResultId] -> ResultDescription
+ Simulation.Aivika.Trans.Results.Locale: localisePathResultTitle :: ResultLocalisation -> [ResultId] -> ResultDescription
+ Simulation.Aivika.Trans.Results.Locale: pathResultLocalisation :: (ResultId -> ResultDescription) -> [ResultId] -> ResultDescription
+ Simulation.Aivika.Trans.Results.Locale: resultNameToTitle :: ResultName -> ResultDescription
+ Simulation.Aivika.Trans.Results.Locale.English: englishResultLocalisation :: ResultLocalisation
+ Simulation.Aivika.Trans.Results.Locale.Russian: russianResultLocalisation :: ResultLocalisation
+ Simulation.Aivika.Trans.Results.Locale.Types: ActivityId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ActivityIdleFactorId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ActivityIdleTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ActivityInitStateId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ActivityPreemptionFactorId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ActivityPreemptionTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ActivityStateId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ActivityTotalIdleTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ActivityTotalPreemptionTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ActivityTotalUtilisationTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ActivityUtilisationFactorId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ActivityUtilisationTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ArrivalProcessingTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ArrivalTimerId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: DequeueCountId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: DequeueExtractCountId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: DequeueExtractRateId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: DequeueRateId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: DequeueStrategyId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: DequeueWaitTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: EnqueueCountId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: EnqueueLostCountId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: EnqueueRateId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: EnqueueStoreCountId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: EnqueueStoreRateId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: EnqueueStoringStrategyId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: EnqueueStrategyId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: EnqueueWaitTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: FiniteQueueId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: InfiniteQueueId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: LocalisedResult :: Map ResultLocale ResultDescription -> Map ResultLocale ResultDescription -> LocalisedResult
+ Simulation.Aivika.Trans.Results.Locale.Types: LocalisedResultId :: LocalisedResult -> ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: OperationId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: OperationPreemptionFactorId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: OperationPreemptionTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: OperationTotalPreemptionTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: OperationTotalUtilisationTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: OperationUtilisationFactorId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: OperationUtilisationTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: QueueCountId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: QueueCountStatsId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: QueueFullId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: QueueLoadFactorId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: QueueMaxCountId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: QueueNullId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: QueueRateId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: QueueTotalWaitTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: QueueWaitTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ResourceCountId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ResourceCountStatsId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ResourceId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ResourceQueueCountId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ResourceQueueCountStatsId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ResourceTotalWaitTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ResourceUtilisationCountId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ResourceUtilisationCountStatsId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ResourceWaitTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ResultLocalisation :: (ResultId -> ResultDescription) -> (ResultId -> ResultDescription) -> ResultLocalisation
+ Simulation.Aivika.Trans.Results.Locale.Types: SamplingCounterId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: SamplingCounterStatsId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: SamplingCounterValueId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: SamplingStatsCountId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: SamplingStatsDeviationId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: SamplingStatsId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: SamplingStatsMaxId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: SamplingStatsMean2Id :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: SamplingStatsMeanId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: SamplingStatsMinId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: SamplingStatsVarianceId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ServerId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ServerInitStateId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ServerInputWaitFactorId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ServerInputWaitTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ServerOutputWaitFactorId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ServerOutputWaitTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ServerPreemptionFactorId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ServerPreemptionTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ServerProcessingFactorId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ServerProcessingTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ServerStateId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ServerTotalInputWaitTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ServerTotalOutputWaitTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ServerTotalPreemptionTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: ServerTotalProcessingTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: TimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: TimingCounterId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: TimingCounterStatsId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: TimingCounterValueId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: TimingStatsCountId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: TimingStatsDeviationId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: TimingStatsId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: TimingStatsLastTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: TimingStatsMaxId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: TimingStatsMaxTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: TimingStatsMeanId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: TimingStatsMinId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: TimingStatsMinTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: TimingStatsStartTimeId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: TimingStatsSum2Id :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: TimingStatsSumId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: TimingStatsVarianceId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: UserDefinedResult :: ResultName -> ResultDescription -> ResultDescription -> UserDefinedResult
+ Simulation.Aivika.Trans.Results.Locale.Types: UserDefinedResultId :: UserDefinedResult -> ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: VectorId :: ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: VectorItemId :: String -> ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: [localiseResultDescription] :: ResultLocalisation -> ResultId -> ResultDescription
+ Simulation.Aivika.Trans.Results.Locale.Types: [localiseResultTitle] :: ResultLocalisation -> ResultId -> ResultDescription
+ Simulation.Aivika.Trans.Results.Locale.Types: [localisedResultDescriptions] :: LocalisedResult -> Map ResultLocale ResultDescription
+ Simulation.Aivika.Trans.Results.Locale.Types: [localisedResultTitles] :: LocalisedResult -> Map ResultLocale ResultDescription
+ Simulation.Aivika.Trans.Results.Locale.Types: [userDefinedResultDescription] :: UserDefinedResult -> ResultDescription
+ Simulation.Aivika.Trans.Results.Locale.Types: [userDefinedResultName] :: UserDefinedResult -> ResultName
+ Simulation.Aivika.Trans.Results.Locale.Types: [userDefinedResultTitle] :: UserDefinedResult -> ResultDescription
+ Simulation.Aivika.Trans.Results.Locale.Types: data LocalisedResult
+ Simulation.Aivika.Trans.Results.Locale.Types: data ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: data ResultLocalisation
+ Simulation.Aivika.Trans.Results.Locale.Types: data UserDefinedResult
+ Simulation.Aivika.Trans.Results.Locale.Types: englishResultLocale :: ResultLocale
+ Simulation.Aivika.Trans.Results.Locale.Types: instance GHC.Classes.Eq Simulation.Aivika.Trans.Results.Locale.Types.LocalisedResult
+ Simulation.Aivika.Trans.Results.Locale.Types: instance GHC.Classes.Eq Simulation.Aivika.Trans.Results.Locale.Types.ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: instance GHC.Classes.Eq Simulation.Aivika.Trans.Results.Locale.Types.UserDefinedResult
+ Simulation.Aivika.Trans.Results.Locale.Types: instance GHC.Classes.Ord Simulation.Aivika.Trans.Results.Locale.Types.LocalisedResult
+ Simulation.Aivika.Trans.Results.Locale.Types: instance GHC.Classes.Ord Simulation.Aivika.Trans.Results.Locale.Types.ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: instance GHC.Classes.Ord Simulation.Aivika.Trans.Results.Locale.Types.UserDefinedResult
+ Simulation.Aivika.Trans.Results.Locale.Types: instance GHC.Show.Show Simulation.Aivika.Trans.Results.Locale.Types.LocalisedResult
+ Simulation.Aivika.Trans.Results.Locale.Types: instance GHC.Show.Show Simulation.Aivika.Trans.Results.Locale.Types.ResultId
+ Simulation.Aivika.Trans.Results.Locale.Types: instance GHC.Show.Show Simulation.Aivika.Trans.Results.Locale.Types.UserDefinedResult
+ Simulation.Aivika.Trans.Results.Locale.Types: localisePathResultDescription :: ResultLocalisation -> [ResultId] -> ResultDescription
+ Simulation.Aivika.Trans.Results.Locale.Types: localisePathResultTitle :: ResultLocalisation -> [ResultId] -> ResultDescription
+ Simulation.Aivika.Trans.Results.Locale.Types: lookupResultLocalisation :: ResultLocale -> Map ResultLocale ResultDescription -> ResultDescription
+ Simulation.Aivika.Trans.Results.Locale.Types: pathResultLocalisation :: (ResultId -> ResultDescription) -> [ResultId] -> ResultDescription
+ Simulation.Aivika.Trans.Results.Locale.Types: resultNameToTitle :: ResultName -> ResultDescription
+ Simulation.Aivika.Trans.Results.Locale.Types: russianResultLocale :: ResultLocale
+ Simulation.Aivika.Trans.Results.Locale.Types: type ResultDescription = String
+ Simulation.Aivika.Trans.Results.Locale.Types: type ResultLocale = String
+ Simulation.Aivika.Trans.Results.Locale.Types: type ResultName = String
+ Simulation.Aivika.Trans.Signal: newSignalInTimeGrid :: MonadDES m => Int -> Event m (Signal m Int)
+ Simulation.Aivika.Trans.Specs: timeGrid :: Specs m -> Int -> [(Int, Double)]
- Simulation.Aivika.Trans.Results: ResultContainer :: ResultName -> ResultId -> e -> ResultSignal m -> ResultContainer e m
+ Simulation.Aivika.Trans.Results: ResultContainer :: ResultName -> [ResultName] -> ResultId -> [ResultId] -> e -> ResultSignal m -> ResultContainer e m
- Simulation.Aivika.Trans.Results: ResultValue :: ResultName -> ResultId -> ResultData e m -> ResultSignal m -> ResultValue e m
+ Simulation.Aivika.Trans.Results: ResultValue :: ResultName -> [ResultName] -> ResultId -> [ResultId] -> ResultData e m -> ResultSignal m -> ResultValue e m
- Simulation.Aivika.Trans.Results: class MonadDES m => ResultProvider p m | p -> m where resultSource name descr = resultSource' name (UserDefinedResultId descr)
+ 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: computeResultValue :: ResultComputing t m => ResultName -> ResultId -> t m a -> ResultValue a m
+ Simulation.Aivika.Trans.Results: computeResultValue :: ResultComputing t m => ResultName -> [ResultName] -> ResultId -> [ResultId] -> t m a -> ResultValue a m
- Simulation.Aivika.Trans.Results: resultSource' :: ResultProvider p m => ResultName -> ResultId -> p -> ResultSource m
+ Simulation.Aivika.Trans.Results: resultSource' :: ResultProvider p m => ResultName -> [ResultName] -> ResultId -> [ResultId] -> p -> ResultSource m
- Simulation.Aivika.Trans.Results.Locale: LocalisedResultId :: (Map ResultLocale ResultDescription) -> ResultId
+ Simulation.Aivika.Trans.Results.Locale: LocalisedResultId :: LocalisedResult -> ResultId
- Simulation.Aivika.Trans.Results.Locale: UserDefinedResultId :: ResultDescription -> ResultId
+ Simulation.Aivika.Trans.Results.Locale: UserDefinedResultId :: UserDefinedResult -> ResultId
- Simulation.Aivika.Trans.Results.Locale: lookupResultLocalisation :: ResultLocale -> ResultLocalisation
+ Simulation.Aivika.Trans.Results.Locale: lookupResultLocalisation :: ResultLocale -> Map ResultLocale ResultDescription -> ResultDescription

Files

CHANGELOG.md view
@@ -1,4 +1,11 @@ +Version 5.3+-----++* Introduced the result source titles, which can be useful when plotting the charts.++* Added functions newSignalInTimeGrid and timeGrid.+ Version 5.2 ----- 
Simulation/Aivika/Trans.hs view
@@ -46,8 +46,8 @@         module Simulation.Aivika.Trans.Ref,         module Simulation.Aivika.Trans.Resource.Base,         module Simulation.Aivika.Trans.Results,-        module Simulation.Aivika.Trans.Results.Locale,         module Simulation.Aivika.Trans.Results.IO,+        module Simulation.Aivika.Trans.Results.Locale,         module Simulation.Aivika.Trans.SD,         module Simulation.Aivika.Trans.Server,         module Simulation.Aivika.Trans.Server.Random,@@ -99,8 +99,8 @@ import Simulation.Aivika.Trans.Ref import Simulation.Aivika.Trans.Resource.Base import Simulation.Aivika.Trans.Results-import Simulation.Aivika.Trans.Results.Locale import Simulation.Aivika.Trans.Results.IO+import Simulation.Aivika.Trans.Results.Locale import Simulation.Aivika.Trans.SD import Simulation.Aivika.Trans.Server import Simulation.Aivika.Trans.Server.Random
Simulation/Aivika/Trans/Composite.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, UndecidableInstances, RecursiveDo #-}+{-# LANGUAGE MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, UndecidableInstances, RecursiveDo, MonoLocalBinds #-}  -- | -- Module     : Simulation.Aivika.Trans.Composite
Simulation/Aivika/Trans/Internal/Event.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE RecursiveDo, MultiParamTypeClasses, FlexibleInstances, FlexibleContexts #-}+{-# LANGUAGE RecursiveDo, MultiParamTypeClasses, FlexibleInstances, FlexibleContexts, MonoLocalBinds #-}  -- | -- Module     : Simulation.Aivika.Trans.Internal.Event
Simulation/Aivika/Trans/Internal/Process.hs view
@@ -746,6 +746,10 @@ -- -- A cancellation of the child process doesn't lead to cancelling the parent process. -- Then 'Nothing' is returned within the computation.+--+-- This is a heavy-weight operation destined for working with arbitrary discontinuous+-- processes. Please consider using a more light-weight function 'interruptProcess' or else+-- 'cancelProcessWithId' whenever possible. timeoutProcess :: MonadDES m => Double -> Process m a -> Process m (Maybe a) {-# INLINABLE timeoutProcess #-} timeoutProcess timeout p =@@ -762,6 +766,10 @@ -- -- A cancellation of the child process doesn't lead to cancelling the parent process. -- Then 'Nothing' is returned within the computation.+--+-- This is a heavy-weight operation destined for working with arbitrary discontinuous+-- processes. Please consider using a more light-weight function 'interruptProcess' or else+-- 'cancelProcessWithId' whenever possible. timeoutProcessUsingId :: MonadDES m => Double -> ProcessId m -> Process m a -> Process m (Maybe a) {-# INLINABLE timeoutProcessUsingId #-} timeoutProcessUsingId timeout pid p =
Simulation/Aivika/Trans/Internal/Specs.hs view
@@ -27,6 +27,7 @@         integPointsStartingFrom,         integStartPoint,         integStopPoint,+        timeGrid,         pointAt) where  import Simulation.Aivika.Trans.Internal.Types@@ -175,3 +176,15 @@                            pointTime = basicTime sc n 0,                            pointIteration = n,                            pointPhase = 0 }++-- | Return the indexed time values in the grid by specified size.+timeGrid :: Specs m -> Int -> [(Int, Double)]+timeGrid sc n =+  let t0 = spcStartTime sc+      t2 = spcStopTime sc+      n' = max (n - 1) 1+      dt = (t2 - t0) / (fromIntegral n')+      f i | i == 0    = (i, t0)+          | i == n'   = (i, t2)+          | otherwise = (i, t0 + (fromIntegral i) * dt)+  in map f [0 .. n']
Simulation/Aivika/Trans/Results.hs view
@@ -127,25 +127,30 @@ import Simulation.Aivika.Trans.Server import Simulation.Aivika.Trans.Activity import Simulation.Aivika.Trans.Operation-import Simulation.Aivika.Trans.Results.Locale+import Simulation.Aivika.Trans.Results.Locale.Types import Simulation.Aivika.Trans.SD import Simulation.Aivika.Trans.DES import Simulation.Aivika.Trans.Resource import qualified Simulation.Aivika.Trans.Resource.Preemption as PR --- | A name used for indentifying the results when generating output.-type ResultName = String- -- | Represents a provider of the simulation results. It is usually something, or -- an array of something, or a list of such values which can be simulated to get data. class MonadDES m => ResultProvider p m | p -> m where      -- | Return the source of simulation results by the specified name, description and provider.    resultSource :: ResultName -> ResultDescription -> p -> ResultSource m-  resultSource name descr = resultSource' name (UserDefinedResultId descr)+  resultSource name descr = resultSource' name [name] i [i]+    where i = (UserDefinedResultId $ UserDefinedResult name descr title)+          title = resultNameToTitle name+  +  -- | Return the source of simulation results by the specified name, description, title and provider. +  resultSource3 :: ResultName -> ResultDescription -> ResultDescription -> p -> ResultSource m+  resultSource3 name descr title = resultSource' name [name] i [i]+    where i = (UserDefinedResultId $ UserDefinedResult name descr title) -  -- | Return the source of simulation results by the specified name, identifier and provider. -  resultSource' :: ResultName -> ResultId -> p -> ResultSource m+  -- | Return the source of simulation results by the specified name, its name path,+  -- identifier, the corresponding indentifier path and provider. +  resultSource' :: ResultName -> [ResultName] -> ResultId -> [ResultId] -> p -> ResultSource m  -- | It associates the result sources with their names. type ResultSourceMap m = M.Map ResultName (ResultSource m)@@ -169,8 +174,14 @@   -- | The item name.   resultItemName :: a m -> ResultName   +  -- | The item name path.+  resultItemNamePath :: a m -> [ResultName]+     -- | The item identifier.   resultItemId :: a m -> ResultId+  +  -- | The item identifier path.+  resultItemIdPath :: a m -> [ResultId]    -- | Whether the item emits a signal.   resultItemSignal :: MonadDES m => a m -> ResultSignal m@@ -420,8 +431,12 @@ data ResultValue e m =   ResultValue { resultValueName :: ResultName,                 -- ^ The value name.+                resultValueNamePath :: [ResultName],+                -- ^ The value name path.                 resultValueId :: ResultId,                 -- ^ The value identifier.+                resultValueIdPath :: [ResultId],+                -- ^ The value identifier path.                 resultValueData :: ResultData e m,                 -- ^ Simulation data supplied by the value.                 resultValueSignal :: ResultSignal m@@ -440,8 +455,12 @@ data ResultContainer e m =   ResultContainer { resultContainerName :: ResultName,                     -- ^ The container name.+                    resultContainerNamePath :: [ResultName],+                    -- ^ The container name path.                     resultContainerId :: ResultId,                     -- ^ The container identifier.+                    resultContainerIdPath :: [ResultId],+                    -- ^ The container identifier path.                     resultContainerData :: e,                     -- ^ The container data.                     resultContainerSignal :: ResultSignal m@@ -469,7 +488,9 @@   ResultItem $   ResultValue {     resultValueName   = (resultContainerName cont) ++ "." ++ name,+    resultValueNamePath = (resultContainerNamePath cont) ++ [name],     resultValueId     = i,+    resultValueIdPath = (resultContainerIdPath cont) ++ [i],     resultValueData   = f (resultContainerData cont),     resultValueSignal = g (resultContainerData cont) } @@ -556,7 +577,9 @@ resultValueToContainer x =   ResultContainer {     resultContainerName   = resultValueName x,+    resultContainerNamePath = resultValueNamePath x,     resultContainerId     = resultValueId x,+    resultContainerIdPath = resultValueIdPath x,     resultContainerData   = resultValueData x,     resultContainerSignal = resultValueSignal x } @@ -565,7 +588,9 @@ resultContainerToValue x =   ResultValue {     resultValueName   = resultContainerName x,+    resultValueNamePath = resultContainerNamePath x,     resultValueId     = resultContainerId x,+    resultValueIdPath = resultContainerIdPath x,     resultValueData   = resultContainerData x,     resultValueSignal = resultContainerSignal x } @@ -617,7 +642,9 @@ instance ResultItemable (ResultValue Int) where    resultItemName = resultValueName+  resultItemNamePath = resultValueNamePath   resultItemId = resultValueId+  resultItemIdPath = resultValueIdPath   resultItemSignal = resultValueSignal      resultItemAsIntValue = Just@@ -638,7 +665,9 @@ instance ResultItemable (ResultValue Double) where    resultItemName = resultValueName+  resultItemNamePath = resultValueNamePath   resultItemId = resultValueId+  resultItemIdPath = resultValueIdPath   resultItemSignal = resultValueSignal      resultItemAsIntValue = const Nothing@@ -659,7 +688,9 @@ instance ResultItemable (ResultValue [Int]) where    resultItemName = resultValueName+  resultItemNamePath = resultValueNamePath   resultItemId = resultValueId+  resultItemIdPath = resultValueIdPath   resultItemSignal = resultValueSignal      resultItemAsIntValue = const Nothing@@ -680,7 +711,9 @@ instance ResultItemable (ResultValue [Double]) where    resultItemName = resultValueName+  resultItemNamePath = resultValueNamePath   resultItemId = resultValueId+  resultItemIdPath = resultValueIdPath   resultItemSignal = resultValueSignal      resultItemAsIntValue = const Nothing@@ -701,7 +734,9 @@ instance ResultItemable (ResultValue (SamplingStats Int)) where    resultItemName = resultValueName+  resultItemNamePath = resultValueNamePath   resultItemId = resultValueId+  resultItemIdPath = resultValueIdPath   resultItemSignal = resultValueSignal      resultItemAsIntValue = const Nothing@@ -722,7 +757,9 @@ instance ResultItemable (ResultValue (SamplingStats Double)) where    resultItemName = resultValueName+  resultItemNamePath = resultValueNamePath   resultItemId = resultValueId+  resultItemIdPath = resultValueIdPath   resultItemSignal = resultValueSignal      resultItemAsIntValue = const Nothing@@ -743,7 +780,9 @@ instance ResultItemable (ResultValue (TimingStats Int)) where    resultItemName = resultValueName+  resultItemNamePath = resultValueNamePath   resultItemId = resultValueId+  resultItemIdPath = resultValueIdPath   resultItemSignal = resultValueSignal      resultItemAsIntValue = const Nothing@@ -764,7 +803,9 @@ instance ResultItemable (ResultValue  (TimingStats Double)) where    resultItemName = resultValueName+  resultItemNamePath = resultValueNamePath   resultItemId = resultValueId+  resultItemIdPath = resultValueIdPath   resultItemSignal = resultValueSignal      resultItemAsIntValue = const Nothing@@ -785,7 +826,9 @@ instance ResultItemable (ResultValue Bool) where    resultItemName = resultValueName+  resultItemNamePath = resultValueNamePath   resultItemId = resultValueId+  resultItemIdPath = resultValueIdPath   resultItemSignal = resultValueSignal      resultItemAsIntValue = const Nothing@@ -806,7 +849,9 @@ instance ResultItemable (ResultValue String) where    resultItemName = resultValueName+  resultItemNamePath = resultValueNamePath   resultItemId = resultValueId+  resultItemIdPath = resultValueIdPath   resultItemSignal = resultValueSignal      resultItemAsIntValue = const Nothing@@ -827,7 +872,9 @@ instance ResultItemable (ResultValue ()) where    resultItemName = resultValueName+  resultItemNamePath = resultValueNamePath   resultItemId = resultValueId+  resultItemIdPath = resultValueIdPath   resultItemSignal = resultValueSignal      resultItemAsIntValue = const Nothing@@ -848,7 +895,9 @@ instance ResultItemable (ResultValue FCFS) where    resultItemName = resultValueName+  resultItemNamePath = resultValueNamePath   resultItemId = resultValueId+  resultItemIdPath = resultValueIdPath   resultItemSignal = resultValueSignal      resultItemAsIntValue = const Nothing@@ -869,7 +918,9 @@ instance ResultItemable (ResultValue LCFS) where    resultItemName = resultValueName+  resultItemNamePath = resultValueNamePath   resultItemId = resultValueId+  resultItemIdPath = resultValueIdPath   resultItemSignal = resultValueSignal      resultItemAsIntValue = const Nothing@@ -890,7 +941,9 @@ instance ResultItemable (ResultValue SIRO) where    resultItemName = resultValueName+  resultItemNamePath = resultValueNamePath   resultItemId = resultValueId+  resultItemIdPath = resultValueIdPath   resultItemSignal = resultValueSignal      resultItemAsIntValue = const Nothing@@ -911,7 +964,9 @@ instance ResultItemable (ResultValue StaticPriorities) where    resultItemName = resultValueName+  resultItemNamePath = resultValueNamePath   resultItemId = resultValueId+  resultItemIdPath = resultValueIdPath   resultItemSignal = resultValueSignal      resultItemAsIntValue = const Nothing@@ -1283,15 +1338,21 @@ computeResultValue :: ResultComputing t m                       => ResultName                       -- ^ the result name+                      -> [ResultName]+                      -- ^ the result name path                       -> ResultId                       -- ^ the result identifier+                      -> [ResultId]+                      -- ^ the result identifier path                       -> t m a                       -- ^ the result computation                       -> ResultValue a m-computeResultValue name i m =+computeResultValue name names i is m =   ResultValue {     resultValueName   = name,+    resultValueNamePath = names,     resultValueId     = i,+    resultValueIdPath = is,     resultValueData   = computeResultData m,     resultValueSignal = computeResultSignal m } @@ -1882,7 +1943,7 @@  -- | Return the source of the modeling time. timeResultSource :: MonadDES m => ResultSource m-timeResultSource = resultSource' "t" TimeId time+timeResultSource = resultSource' "t" ["t"] TimeId [TimeId] time                           -- | Make an integer subscript intSubscript :: Int -> ResultName@@ -1890,91 +1951,91 @@  instance {-# OVERLAPPABLE #-} (MonadDES m, ResultItemable (ResultValue a)) => ResultProvider (Parameter m a) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ computeResultValue name names i is m  instance {-# OVERLAPPABLE #-} (MonadDES m, ResultItemable (ResultValue a)) => ResultProvider (Simulation m a) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ computeResultValue name names i is m  instance {-# OVERLAPPABLE #-} (MonadDES m, ResultItemable (ResultValue a)) => ResultProvider (Dynamics m a) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ computeResultValue name names i is m  instance {-# OVERLAPPABLE #-} (MonadDES m, ResultItemable (ResultValue a)) => ResultProvider (Event m a) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ computeResultValue name names i is m  instance {-# OVERLAPPABLE #-} (MonadDES m, ResultItemable (ResultValue a)) => ResultProvider (Ref m a) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ computeResultValue name names i is m  instance {-# OVERLAPPABLE #-} (MonadDES m, ResultItemable (ResultValue a)) => ResultProvider (B.Ref m a) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ computeResultValue name names i is m  instance {-# OVERLAPPABLE #-} (MonadDES m, MonadVar m, ResultItemable (ResultValue a)) => ResultProvider (Var m a) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ computeResultValue name names i is m  instance {-# OVERLAPPABLE #-} (MonadDES m, ResultItemable (ResultValue a)) => ResultProvider (Signalable m a) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m,                               ResultItemable (ResultValue a),                               ResultItemable (ResultValue (SamplingStats a)))                              => ResultProvider (Parameter m (SamplingCounter a)) m where -  resultSource' name i m =-    samplingCounterResultSource $ computeResultValue name i m+  resultSource' name names i is m =+    samplingCounterResultSource $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m,                               ResultItemable (ResultValue a),                               ResultItemable (ResultValue (SamplingStats a)))                              => ResultProvider (Simulation m (SamplingCounter a)) m where -  resultSource' name i m =-    samplingCounterResultSource $ computeResultValue name i m+  resultSource' name names i is m =+    samplingCounterResultSource $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m,                               ResultItemable (ResultValue a),                               ResultItemable (ResultValue (SamplingStats a)))                              => ResultProvider (Dynamics m (SamplingCounter a)) m where -  resultSource' name i m =-    samplingCounterResultSource $ computeResultValue name i m+  resultSource' name names i is m =+    samplingCounterResultSource $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m,                               ResultItemable (ResultValue a),                               ResultItemable (ResultValue (SamplingStats a)))                              => ResultProvider (Event m (SamplingCounter a)) m where -  resultSource' name i m =-    samplingCounterResultSource $ computeResultValue name i m+  resultSource' name names i is m =+    samplingCounterResultSource $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m,                               ResultItemable (ResultValue a),                               ResultItemable (ResultValue (SamplingStats a)))                              => ResultProvider (Ref m (SamplingCounter a)) m where -  resultSource' name i m =-    samplingCounterResultSource $ computeResultValue name i m+  resultSource' name names i is m =+    samplingCounterResultSource $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m,                               ResultItemable (ResultValue a),                               ResultItemable (ResultValue (SamplingStats a)))                              => ResultProvider (B.Ref m (SamplingCounter a)) m where -  resultSource' name i m =-    samplingCounterResultSource $ computeResultValue name i m+  resultSource' name names i is m =+    samplingCounterResultSource $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m,                               MonadVar m,@@ -1982,64 +2043,64 @@                               ResultItemable (ResultValue (SamplingStats a)))                              => ResultProvider (Var m (SamplingCounter a)) m where -  resultSource' name i m =-    samplingCounterResultSource $ computeResultValue name i m+  resultSource' name names i is m =+    samplingCounterResultSource $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m,                               ResultItemable (ResultValue a),                               ResultItemable (ResultValue (SamplingStats a)))                              => ResultProvider (Signalable m (SamplingCounter a)) m where -  resultSource' name i m =-    samplingCounterResultSource $ computeResultValue name i m+  resultSource' name names i is m =+    samplingCounterResultSource $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m,                               ResultItemable (ResultValue a),                               ResultItemable (ResultValue (TimingStats a)))                              => ResultProvider (Parameter m (TimingCounter a)) m where -  resultSource' name i m =-    timingCounterResultSource $ computeResultValue name i m+  resultSource' name names i is m =+    timingCounterResultSource $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m,                               ResultItemable (ResultValue a),                               ResultItemable (ResultValue (TimingStats a)))                              => ResultProvider (Simulation m (TimingCounter a)) m where -  resultSource' name i m =-    timingCounterResultSource $ computeResultValue name i m+  resultSource' name names i is m =+    timingCounterResultSource $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m,                               ResultItemable (ResultValue a),                               ResultItemable (ResultValue (TimingStats a)))                              => ResultProvider (Dynamics m (TimingCounter a)) m where -  resultSource' name i m =-    timingCounterResultSource $ computeResultValue name i m+  resultSource' name names i is m =+    timingCounterResultSource $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m,                               ResultItemable (ResultValue a),                               ResultItemable (ResultValue (TimingStats a)))                              => ResultProvider (Event m (TimingCounter a)) m where -  resultSource' name i m =-    timingCounterResultSource $ computeResultValue name i m+  resultSource' name names i is m =+    timingCounterResultSource $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m,                               ResultItemable (ResultValue a),                               ResultItemable (ResultValue (TimingStats a)))                              => ResultProvider (Ref m (TimingCounter a)) m where -  resultSource' name i m =-    timingCounterResultSource $ computeResultValue name i m+  resultSource' name names i is m =+    timingCounterResultSource $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m,                               ResultItemable (ResultValue a),                               ResultItemable (ResultValue (TimingStats a)))                              => ResultProvider (B.Ref m (TimingCounter a)) m where -  resultSource' name i m =-    timingCounterResultSource $ computeResultValue name i m+  resultSource' name names i is m =+    timingCounterResultSource $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m,                               MonadVar m,@@ -2047,34 +2108,34 @@                               ResultItemable (ResultValue (TimingStats a)))                              => ResultProvider (Var m (TimingCounter a)) m where -  resultSource' name i m =-    timingCounterResultSource $ computeResultValue name i m+  resultSource' name names i is m =+    timingCounterResultSource $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m,                               ResultItemable (ResultValue a),                               ResultItemable (ResultValue (TimingStats a)))                              => ResultProvider (Signalable m (TimingCounter a)) m where -  resultSource' name i m =-    timingCounterResultSource $ computeResultValue name i m+  resultSource' name names i is m =+    timingCounterResultSource $ computeResultValue name names i is m  instance ResultProvider p m => ResultProvider [p] m where -  resultSource' name i m =-    resultSource' name i $ ResultListWithSubscript m subscript where+  resultSource' name names i is m =+    resultSource' name names i is $ ResultListWithSubscript m subscript where       subscript = map snd $ zip m $ map intSubscript [0..]  instance (Show i, Ix i, ResultProvider p m) => ResultProvider (A.Array i p) m where -  resultSource' name i m =-    resultSource' name i $ ResultListWithSubscript items subscript where+  resultSource' name names i is m =+    resultSource' name names i is $ ResultListWithSubscript items subscript where       items = A.elems m       subscript = map (\i -> "[" ++ show i ++ "]") (A.indices m)  instance ResultProvider p m => ResultProvider (V.Vector p) m where   -  resultSource' name i m =-    resultSource' name i $ ResultVectorWithSubscript m subscript where+  resultSource' name names i is m =+    resultSource' name names i is $ ResultVectorWithSubscript m subscript where       subscript = V.imap (\i x -> intSubscript i) m  -- | Represents a list with the specified subscript.@@ -2091,7 +2152,7 @@  instance ResultProvider p m => ResultProvider (ResultListWithSubscript p) m where -  resultSource' name i (ResultListWithSubscript xs ys) =+  resultSource' name names i is (ResultListWithSubscript xs ys) =     ResultVectorSource $     memoResultVectorSignal $     memoResultVectorSummary $@@ -2107,20 +2168,23 @@       ays    = A.listArray bnds ys       items  =         flip map (zip ys xs) $ \(y, x) ->-        let name' = name ++ y-        in resultSource' name' (VectorItemId y) x+        let name'  = name ++ y+            names' = names ++ [y]+            i'  = VectorItemId y+            is' = is ++ [i']+        in resultSource' name' names' i' is' x       items' = map resultSourceSummary items  instance (Show i, Ix i, ResultProvider p m) => ResultProvider (ResultArrayWithSubscript i p) m where -  resultSource' name i (ResultArrayWithSubscript xs ys) =-    resultSource' name i $ ResultListWithSubscript items subscript where+  resultSource' name names i is (ResultArrayWithSubscript xs ys) =+    resultSource' name names i is $ ResultListWithSubscript items subscript where       items = A.elems xs       subscript = A.elems ys  instance ResultProvider p m => ResultProvider (ResultVectorWithSubscript p) m where -  resultSource' name i (ResultVectorWithSubscript xs ys) =+  resultSource' name names i is (ResultVectorWithSubscript xs ys) =     ResultVectorSource $     memoResultVectorSignal $     memoResultVectorSummary $@@ -2138,89 +2202,92 @@         V.generate (V.length xs) $ \i ->         let x = xs V.! i             y = ys V.! i-            name' = name ++ y-        in resultSource' name' (VectorItemId y) x+            name'  = name ++ y+            names' = names ++ [y]+            i'  = VectorItemId y+            is' = is ++ [i']+        in resultSource' name' names' i' is' x       items' = V.map resultSourceSummary items  instance {-# OVERLAPPING #-} (Ix i, Show i, MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Parameter m (A.Array i e)) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (Ix i, Show i, MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Simulation m (A.Array i e)) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (Ix i, Show i, MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Dynamics m (A.Array i e)) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (Ix i, Show i, MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Event m (A.Array i e)) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (Ix i, Show i, MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Ref m (A.Array i e)) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (Ix i, Show i, MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (B.Ref m (A.Array i e)) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (Ix i, Show i, MonadDES m, MonadVar m, ResultItemable (ResultValue [e])) => ResultProvider (Var m (A.Array i e)) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (Ix i, Show i, MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Signalable m (A.Array i e)) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Parameter m (V.Vector e)) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Simulation m (V.Vector e)) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Dynamics m (V.Vector e)) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Event m (V.Vector e)) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Ref m (V.Vector e)) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (B.Ref m (V.Vector e)) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m, MonadVar m, ResultItemable (ResultValue [e])) => ResultProvider (Var m (V.Vector e)) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name names i is m  instance {-# OVERLAPPING #-} (MonadDES m, ResultItemable (ResultValue [e])) => ResultProvider (Signalable m (V.Vector e)) m where -  resultSource' name i m =-    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name i m+  resultSource' name names i is m =+    ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name names i is m  instance (MonadDES m,           Show si, Show sm, Show so,@@ -2229,8 +2296,8 @@           ResultItemable (ResultValue so))          => ResultProvider (Q.Queue m si sm so a) m where -  resultSource' name i m =-    queueResultSource $ ResultContainer name i m (ResultSignal $ Q.queueChanged_ m)+  resultSource' name names i is m =+    queueResultSource $ ResultContainer name names i is m (ResultSignal $ Q.queueChanged_ m)  instance (MonadDES m,           Show sm, Show so,@@ -2238,35 +2305,35 @@           ResultItemable (ResultValue so))          => ResultProvider (IQ.Queue m sm so a) m where -  resultSource' name i m =-    infiniteQueueResultSource $ ResultContainer name i m (ResultSignal $ IQ.queueChanged_ m)+  resultSource' name names i is m =+    infiniteQueueResultSource $ ResultContainer name names i is m (ResultSignal $ IQ.queueChanged_ m)  instance MonadDES m => ResultProvider (ArrivalTimer m) m where -  resultSource' name i m =-    arrivalTimerResultSource $ ResultContainer name i m (ResultSignal $ arrivalProcessingTimeChanged_ m)+  resultSource' name names i is m =+    arrivalTimerResultSource $ ResultContainer name names i is m (ResultSignal $ arrivalProcessingTimeChanged_ m)  instance (MonadDES m, Show s, ResultItemable (ResultValue s)) => ResultProvider (Server m s a b) m where -  resultSource' name i m =-    serverResultSource $ ResultContainer name i m (ResultSignal $ serverChanged_ m)+  resultSource' name names i is m =+    serverResultSource $ ResultContainer name names i is m (ResultSignal $ serverChanged_ m)  instance (MonadDES m, Show s, ResultItemable (ResultValue s)) => ResultProvider (Activity m s a b) m where -  resultSource' name i m =-    activityResultSource $ ResultContainer name i m (ResultSignal $ activityChanged_ m)+  resultSource' name names i is m =+    activityResultSource $ ResultContainer name names i is m (ResultSignal $ activityChanged_ m)  instance (MonadDES m, Show s, ResultItemable (ResultValue s)) => ResultProvider (Resource m s) m where -  resultSource' name i m =-    resourceResultSource $ ResultContainer name i m (ResultSignal $ resourceChanged_ m)+  resultSource' name names i is m =+    resourceResultSource $ ResultContainer name names i is m (ResultSignal $ resourceChanged_ m)  instance PR.MonadResource m => ResultProvider (PR.Resource m) m where -  resultSource' name i m =-    preemptibleResourceResultSource $ ResultContainer name i m (ResultSignal $ PR.resourceChanged_ m)+  resultSource' name names i is m =+    preemptibleResourceResultSource $ ResultContainer name names i is m (ResultSignal $ PR.resourceChanged_ m)  instance MonadDES m => ResultProvider (Operation m a b) m where -  resultSource' name i m =-    operationResultSource $ ResultContainer name i m (ResultSignal $ operationChanged_ m)+  resultSource' name names i is m =+    operationResultSource $ ResultContainer name names i is m (ResultSignal $ operationChanged_ m)
Simulation/Aivika/Trans/Results/IO.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleContexts, MonoLocalBinds #-}  -- | -- Module     : Simulation.Aivika.Trans.Results.IO@@ -130,7 +130,7 @@      liftIO $        do hPutStr h tab           hPutStr h "-- "-          hPutStr h (loc $ resultItemId x)+          hPutStr h (localiseResultDescription loc $ resultItemId x)           hPutStrLn h ""           hPutStr h tab           hPutStr h label@@ -142,7 +142,7 @@      liftIO $        do hPutStr h tab           hPutStr h "-- "-          hPutStr h (loc $ resultVectorId x)+          hPutStr h (localiseResultDescription loc $ resultVectorId x)           hPutStrLn h ""           hPutStr h tab           hPutStr h label@@ -157,7 +157,7 @@      liftIO $        do hPutStr h tab           hPutStr h "-- "-          hPutStr h (loc $ resultObjectId x)+          hPutStr h (localiseResultDescription loc $ resultObjectId x)           hPutStrLn h ""           hPutStr h tab           hPutStr h label@@ -325,7 +325,7 @@      return $        showString tab .        showString "-- " .-       showString (loc $ resultItemId x) .+       showString (localiseResultDescription loc $ resultItemId x) .        showString "\n" .        showString tab .        showString label .@@ -343,7 +343,7 @@      return $        showString tab .        showString "-- " .-       showString (loc $ resultVectorId x) .+       showString (localiseResultDescription loc $ resultVectorId x) .        showString "\n" .        showString tab .        showString label .@@ -362,7 +362,7 @@      return $        showString tab .        showString "-- " .-       showString (loc $ resultObjectId x) .+       showString (localiseResultDescription loc $ resultObjectId x) .        showString "\n" .        showString tab .        showString label .
Simulation/Aivika/Trans/Results/Locale.hs view
@@ -12,480 +12,25 @@ module Simulation.Aivika.Trans.Results.Locale        (-- * Basic Types         ResultLocale,-        ResultLocalisation,+        ResultLocalisation(..),         ResultDescription,+        UserDefinedResult(..),+        LocalisedResult(..),         -- * Locale Codes         russianResultLocale,         englishResultLocale,         -- * Localisations-        lookupResultLocalisation,         russianResultLocalisation,         englishResultLocalisation,+        pathResultLocalisation,+        localisePathResultDescription,+        localisePathResultTitle,+        lookupResultLocalisation,         -- * Unique Identifiers-        ResultId(..)) where--import qualified Data.Map as M--import Simulation.Aivika.Trans.Dynamics-import Simulation.Aivika.Trans.Statistics-import Simulation.Aivika.Trans.Statistics.Accumulator-import qualified Simulation.Aivika.Trans.Queue as Q-import qualified Simulation.Aivika.Trans.Queue.Infinite as IQ-import Simulation.Aivika.Trans.Arrival-import Simulation.Aivika.Trans.Server-import Simulation.Aivika.Trans.Activity-import Simulation.Aivika.Trans.Resource-import Simulation.Aivika.Trans.Operation---- | A locale to output the simulation results.------ Examples are: @\"ru\", @\"en\" etc.-type ResultLocale = String---- | It localises the description of simulation results.-type ResultLocalisation = ResultId -> ResultDescription---- | A description used for describing the results when generating output.-type ResultDescription = String---- | The result entity identifier.-data ResultId = TimeId-                -- ^ A 'time' computation.-              | VectorId-                -- ^ Describes a vector.-              | VectorItemId String-                -- ^ Describes a vector item with the specified subscript.-              | SamplingStatsId-                -- ^ A 'SamplingStats' value.-              | SamplingStatsCountId-                -- ^ Property 'samplingStatsCount'.-              | SamplingStatsMinId-                -- ^ Property 'samplingStatsMin'.-              | SamplingStatsMaxId-                -- ^ Property 'samplingStatsMax'.-              | SamplingStatsMeanId-                -- ^ Property 'samplingStatsMean'.-              | SamplingStatsMean2Id-                -- ^ Property 'samplingStatsMean2'.-              | SamplingStatsVarianceId-                -- ^ Property 'samplingStatsVariance'.-              | SamplingStatsDeviationId-                -- ^ Property 'samplingStatsDeviation'.-              | SamplingCounterId-                -- ^ A 'SamplingCounter' value.-              | SamplingCounterValueId-                -- ^ Property 'samplingCounterValue'.-              | SamplingCounterStatsId-                -- ^ Property 'samplingCounterStats'.-              | TimingStatsId-                -- ^ A 'TimingStats' value.-              | TimingStatsCountId-                -- ^ Property 'timingStatsCount'.-              | TimingStatsMinId-                -- ^ Property 'timingStatsMin'.-              | TimingStatsMaxId-                -- ^ Property 'timingStatsMax'.-              | TimingStatsMeanId-                -- ^ Property 'timingStatsMean'.-              | TimingStatsVarianceId-                -- ^ Property 'timingStatsVariance'.-              | TimingStatsDeviationId-                -- ^ Property 'timingStatsDeviation'.-              | TimingStatsMinTimeId-                -- ^ Property 'timingStatsMinTime'.-              | TimingStatsMaxTimeId-                -- ^ Property 'timingStatsMaxTime'.-              | TimingStatsStartTimeId-                -- ^ Property 'timingStatsStartTime'.-              | TimingStatsLastTimeId-                -- ^ Property 'timingStatsLastTime'.-              | TimingStatsSumId-                -- ^ Property 'timingStatsSum'.-              | TimingStatsSum2Id-                -- ^ Property 'timingStatsSum2'.-              | TimingCounterId-                -- ^ A 'TimingCounter' value.-              | TimingCounterValueId-                -- ^ Property 'timingCounterValue'.-              | TimingCounterStatsId-                -- ^ Property 'timingCounterStats'.-              | FiniteQueueId-                -- ^ A finite 'Q.Queue'.-              | InfiniteQueueId-                -- ^ An infinite 'IQ.Queue'.-              | EnqueueStrategyId-                -- ^ Property 'Q.enqueueStrategy'.-              | EnqueueStoringStrategyId-                -- ^ Property 'Q.enqueueStoringStrategy'.-              | DequeueStrategyId-                -- ^ Property 'Q.dequeueStrategy'.-              | QueueNullId-                -- ^ Property 'Q.queueNull'.-              | QueueFullId-                -- ^ Property 'Q.queueFull'.-              | QueueMaxCountId-                -- ^ Property 'Q.queueMaxCount'.-              | QueueCountId-                -- ^ Property 'Q.queueCount'.-              | QueueCountStatsId-                -- ^ Property 'Q.queueCountStats'.-              | EnqueueCountId-                -- ^ Property 'Q.enqueueCount'.-              | EnqueueLostCountId-                -- ^ Property 'Q.enqueueLostCount'.-              | EnqueueStoreCountId-                -- ^ Property 'Q.enqueueStoreCount'.-              | DequeueCountId-                -- ^ Property 'Q.dequeueCount'.-              | DequeueExtractCountId-                -- ^ Property 'Q.dequeueExtractCount'.-              | QueueLoadFactorId-                -- ^ Property 'Q.queueLoadFactor'.-              | EnqueueRateId-                -- ^ Property 'Q.enqueueRate'.-              | EnqueueStoreRateId-                -- ^ Property 'Q.enqueueStoreRate'.-              | DequeueRateId-                -- ^ Property 'Q.dequeueRate'.-              | DequeueExtractRateId-                -- ^ Property 'Q.dequeueExtractRate'.-              | QueueWaitTimeId-                -- ^ Property 'Q.queueWaitTime'.-              | QueueTotalWaitTimeId-                -- ^ Property 'Q.queueTotalWaitTime'.-              | EnqueueWaitTimeId-                -- ^ Property 'Q.enqueueWaitTime'.-              | DequeueWaitTimeId-                -- ^ Property 'Q.dequeueWaitTime'.-              | QueueRateId-                -- ^ Property 'Q.queueRate'.-              | ArrivalTimerId-                -- ^ An 'ArrivalTimer'.-              | ArrivalProcessingTimeId-                -- ^ Property 'arrivalProcessingTime'.-              | ServerId-                -- ^ Represents a 'Server'.-              | ServerInitStateId-                -- ^ Property 'serverInitState'.-              | ServerStateId-                -- ^ Property 'serverState'.-              | ServerTotalInputWaitTimeId-                -- ^ Property 'serverTotalInputWaitTime'.-              | ServerTotalProcessingTimeId-                -- ^ Property 'serverTotalProcessingTime'.-              | ServerTotalOutputWaitTimeId-                -- ^ Property 'serverTotalOutputWaitTime'.-              | ServerTotalPreemptionTimeId-                -- ^ Property 'serverTotalPreemptionTime'.-              | ServerInputWaitTimeId-                -- ^ Property 'serverInputWaitTime'.-              | ServerProcessingTimeId-                -- ^ Property 'serverProcessingTime'.-              | ServerPreemptionTimeId-                -- ^ Property 'serverPreemptionTime'.-              | ServerOutputWaitTimeId-                -- ^ Property 'serverOutputWaitTime'.-              | ServerInputWaitFactorId-                -- ^ Property 'serverInputWaitFactor'.-              | ServerProcessingFactorId-                -- ^ Property 'serverProcessingFactor'.-              | ServerOutputWaitFactorId-                -- ^ Property 'serverOutputWaitFactor'.-              | ServerPreemptionFactorId-                -- ^ Property 'serverPreemptionFactor'.-              | ActivityId-                -- ^ Represents an 'Activity'.-              | ActivityInitStateId-                -- ^ Property 'activityInitState'.-              | ActivityStateId-                -- ^ Property 'activityState'.-              | ActivityTotalUtilisationTimeId-                -- ^ Property 'activityTotalUtilisationTime'.-              | ActivityTotalIdleTimeId-                -- ^ Property 'activityTotalIdleTime'.-              | ActivityTotalPreemptionTimeId-                -- ^ Property 'activityTotalPreemptionTime'.-              | ActivityUtilisationTimeId-                -- ^ Property 'activityUtilisationTime'.-              | ActivityIdleTimeId-                -- ^ Property 'activityIdleTime'.-              | ActivityPreemptionTimeId-                -- ^ Property 'activityPreemptionTime'.-              | ActivityUtilisationFactorId-                -- ^ Property 'activityUtilisationFactor'.-              | ActivityIdleFactorId-                -- ^ Property 'activityIdleFactor'.-              | ActivityPreemptionFactorId-                -- ^ Property 'activityPreemptionFactor'.-              | ResourceId-                -- ^ Represents a 'Resource'.-              | ResourceCountId-                -- ^ Property 'resourceCount'.-              | ResourceCountStatsId-                -- ^ Property 'resourceCountStats'.-              | ResourceUtilisationCountId-                -- ^ Property 'resourceUtilisationCount'.-              | ResourceUtilisationCountStatsId-                -- ^ Property 'resourceUtilisationCountStats'.-              | ResourceQueueCountId-                -- ^ Property 'resourceQueueCount'.-              | ResourceQueueCountStatsId-                -- ^ Property 'resourceQueueCountStats'.-              | ResourceTotalWaitTimeId-                -- ^ Property 'resourceTotalWaitTime'.-              | ResourceWaitTimeId-                -- ^ Property 'resourceWaitTime'.-              | OperationId-                -- ^ Represents an 'Operation'.-              | OperationTotalUtilisationTimeId-                -- ^ Property 'operationTotalUtilisationTime'.-              | OperationTotalPreemptionTimeId-                -- ^ Property 'operationTotalPreemptionTime'.-              | OperationUtilisationTimeId-                -- ^ Property 'operationUtilisationTime'.-              | OperationPreemptionTimeId-                -- ^ Property 'operationPreemptionTime'.-              | OperationUtilisationFactorId-                -- ^ Property 'operationUtilisationFactor'.-              | OperationPreemptionFactorId-                -- ^ Property 'operationPreemptionFactor'.-              | UserDefinedResultId ResultDescription-                -- ^ An user defined description.-              | LocalisedResultId (M.Map ResultLocale ResultDescription)-                -- ^ A localised property or object name.-              deriving (Eq, Ord, Show)---- | The Russian locale.-russianResultLocale :: ResultLocale-russianResultLocale = "ru"---- | The English locale.-englishResultLocale :: ResultLocale-englishResultLocale = "en"---- | The Russian localisation of the simulation results.-russianResultLocalisation :: ResultLocalisation-russianResultLocalisation TimeId = "модельное время"-russianResultLocalisation VectorId = "вектор"-russianResultLocalisation (VectorItemId x) = "элемент с индексом " ++ x-russianResultLocalisation SamplingStatsId = "сводная статистика"-russianResultLocalisation SamplingStatsCountId = "количество"-russianResultLocalisation SamplingStatsMinId = "минимальное значение"-russianResultLocalisation SamplingStatsMaxId = "максимальное значение"-russianResultLocalisation SamplingStatsMeanId = "среднее значение"-russianResultLocalisation SamplingStatsMean2Id = "среднее квадратов"-russianResultLocalisation SamplingStatsVarianceId = "дисперсия"-russianResultLocalisation SamplingStatsDeviationId = "среднеквадратическое отклонение"-russianResultLocalisation TimingStatsId = "временная статистика"-russianResultLocalisation TimingStatsCountId = "количество"-russianResultLocalisation TimingStatsMinId = "минимальное значение"-russianResultLocalisation TimingStatsMaxId = "максимальное значение"-russianResultLocalisation TimingStatsMeanId = "среднее значение"-russianResultLocalisation TimingStatsVarianceId = "дисперсия"-russianResultLocalisation TimingStatsDeviationId = "среднеквадратическое отклонение"-russianResultLocalisation TimingStatsMinTimeId = "время достижения минимума"-russianResultLocalisation TimingStatsMaxTimeId = "время достижения максимума"-russianResultLocalisation TimingStatsStartTimeId = "начальное время сбора статистики"-russianResultLocalisation TimingStatsLastTimeId = "конечное время сбора статистики"-russianResultLocalisation TimingStatsSumId = "сумма"-russianResultLocalisation TimingStatsSum2Id = "сумма квадратов"-russianResultLocalisation SamplingCounterId = "счетчик"-russianResultLocalisation SamplingCounterValueId = "текущее значение"-russianResultLocalisation SamplingCounterStatsId = "статистика"-russianResultLocalisation TimingCounterId = "временной счетчик"-russianResultLocalisation TimingCounterValueId = "текущее значение"-russianResultLocalisation TimingCounterStatsId = "статистика"-russianResultLocalisation FiniteQueueId = "конечная очередь"-russianResultLocalisation InfiniteQueueId = "бесконечная очередь"-russianResultLocalisation EnqueueStrategyId = "стратегия добавления элементов"-russianResultLocalisation EnqueueStoringStrategyId = "стратегия хранения элементов"-russianResultLocalisation DequeueStrategyId = "стратегия извлечения элементов"-russianResultLocalisation QueueNullId = "очередь пуста?"-russianResultLocalisation QueueFullId = "очередь заполнена?"-russianResultLocalisation QueueMaxCountId = "емкость очереди"-russianResultLocalisation QueueCountId = "текущий размер очереди"-russianResultLocalisation QueueCountStatsId = "статистика по размеру очереди"-russianResultLocalisation EnqueueCountId = "общее количество попыток добавить элементы"-russianResultLocalisation EnqueueLostCountId = "общее количество неудачных попыток добавить элементы"-russianResultLocalisation EnqueueStoreCountId = "общее количество сохраненных элементов"-russianResultLocalisation DequeueCountId = "общее количество запросов на извлечение элементов"-russianResultLocalisation DequeueExtractCountId = "общее количество извлеченных элементов"-russianResultLocalisation QueueLoadFactorId = "коэфф. загрузки (размер, поделенный на емкость)"-russianResultLocalisation EnqueueRateId = "количество попыток добавить на ед. времени"-russianResultLocalisation EnqueueStoreRateId = "количество сохраненных на ед. времени"-russianResultLocalisation DequeueRateId = "количество запросов на извлечение в ед. времени"-russianResultLocalisation DequeueExtractRateId = "количество извлеченных на ед. времени"-russianResultLocalisation QueueWaitTimeId = "время ожидания (сохранили -> извлекли)"-russianResultLocalisation QueueTotalWaitTimeId = "общее время ожидания (попытались добавить -> извлекли)"-russianResultLocalisation EnqueueWaitTimeId = "время ожидания добавления (попытались добавить -> сохранили)"-russianResultLocalisation DequeueWaitTimeId = "время ожидания извлечения (запросили извлечь -> извлекли)"-russianResultLocalisation QueueRateId = "усредненная скорость (как средняя длина очереди на среднее время ожидания)"-russianResultLocalisation ArrivalTimerId = "как долго обрабатываются заявки?"-russianResultLocalisation ArrivalProcessingTimeId = "время обработки заявки"-russianResultLocalisation ServerId = "сервер"-russianResultLocalisation ServerInitStateId = "начальное состояние"-russianResultLocalisation ServerStateId = "текущее состояние"-russianResultLocalisation ServerTotalInputWaitTimeId = "общее время блокировки в ожидании ввода"-russianResultLocalisation ServerTotalProcessingTimeId = "общее время, потраченное на саму обработку заданий"-russianResultLocalisation ServerTotalOutputWaitTimeId = "общее время блокировки при попытке доставить вывод"-russianResultLocalisation ServerTotalPreemptionTimeId = "общее время вытеснения"-russianResultLocalisation ServerInputWaitTimeId = "время блокировки в ожидании ввода"-russianResultLocalisation ServerProcessingTimeId = "время, потраченное на саму обработку заданий"-russianResultLocalisation ServerOutputWaitTimeId = "время блокировки при попытке доставить вывод"-russianResultLocalisation ServerPreemptionTimeId = "время вытеснения"-russianResultLocalisation ServerInputWaitFactorId = "относительное время блокировки в ожидании ввода (от 0 до 1)"-russianResultLocalisation ServerProcessingFactorId = "относительное время, потраченное на саму обработку заданий (от 0 до 1)"-russianResultLocalisation ServerOutputWaitFactorId = "относительное время блокировки при попытке доставить вывод (от 0 до 1)"-russianResultLocalisation ServerPreemptionFactorId = "относительное время вытеснения (от 0 до 1)"-russianResultLocalisation ActivityId = "активность"-russianResultLocalisation ActivityInitStateId = "начальное состояние"-russianResultLocalisation ActivityStateId = "текущее состояние"-russianResultLocalisation ActivityTotalUtilisationTimeId = "общее время использования"-russianResultLocalisation ActivityTotalIdleTimeId = "общее время простоя"-russianResultLocalisation ActivityTotalPreemptionTimeId = "общее время вытеснения"-russianResultLocalisation ActivityUtilisationTimeId = "статистика времени использования"-russianResultLocalisation ActivityIdleTimeId = "статистика времени простоя"-russianResultLocalisation ActivityPreemptionTimeId = "статистика времени вытеснения"-russianResultLocalisation ActivityUtilisationFactorId = "относительное время использования (от 0 до 1)"-russianResultLocalisation ActivityIdleFactorId = "относительное время простоя (от 0 до 1)"-russianResultLocalisation ActivityPreemptionFactorId = "относительное время вытеснения (от 0 до 1)"-russianResultLocalisation ResourceId = "ресурс"-russianResultLocalisation ResourceCountId = "текущее доступное количество ресурса"-russianResultLocalisation ResourceCountStatsId = "статистика по доступному количеству ресурса"-russianResultLocalisation ResourceUtilisationCountId = "текущее используемое количество ресурса"-russianResultLocalisation ResourceUtilisationCountStatsId = "статистика по используемому количеству ресурса"-russianResultLocalisation ResourceQueueCountId = "текущая длина очереди к ресурсу"-russianResultLocalisation ResourceQueueCountStatsId = "статистика длины очереди к ресурсу"-russianResultLocalisation ResourceTotalWaitTimeId = "общее время ожидания ресурса"-russianResultLocalisation ResourceWaitTimeId = "время ожидания ресурса"-russianResultLocalisation OperationId = "операция"-russianResultLocalisation OperationTotalUtilisationTimeId = "общее время использования"-russianResultLocalisation OperationTotalPreemptionTimeId = "общее время вытеснения"-russianResultLocalisation OperationUtilisationTimeId = "статистика времени использования"-russianResultLocalisation OperationPreemptionTimeId = "статистика времени вытеснения"-russianResultLocalisation OperationUtilisationFactorId = "относительное время использования (от 0 до 1)"-russianResultLocalisation OperationPreemptionFactorId = "относительное время вытеснения (от 0 до 1)"-russianResultLocalisation (UserDefinedResultId m) = m-russianResultLocalisation x@(LocalisedResultId m) =-  lookupResultLocalisation russianResultLocale x---- | The English localisation of the simulation results.-englishResultLocalisation :: ResultLocalisation-englishResultLocalisation TimeId = "simulation time"-englishResultLocalisation VectorId = "vector"-englishResultLocalisation (VectorItemId x) = "item #" ++ x-englishResultLocalisation SamplingStatsId = "statistics summary"-englishResultLocalisation SamplingStatsCountId = "count"-englishResultLocalisation SamplingStatsMinId = "minimum"-englishResultLocalisation SamplingStatsMaxId = "maximum"-englishResultLocalisation SamplingStatsMeanId = "mean"-englishResultLocalisation SamplingStatsMean2Id = "mean square"-englishResultLocalisation SamplingStatsVarianceId = "variance"-englishResultLocalisation SamplingStatsDeviationId = "deviation"-englishResultLocalisation TimingStatsId = "timing statistics"-englishResultLocalisation TimingStatsCountId = "count"-englishResultLocalisation TimingStatsMinId = "minimum"-englishResultLocalisation TimingStatsMaxId = "maximum"-englishResultLocalisation TimingStatsMeanId = "mean"-englishResultLocalisation TimingStatsVarianceId = "variance"-englishResultLocalisation TimingStatsDeviationId = "deviation"-englishResultLocalisation TimingStatsMinTimeId = "the time of minimum"-englishResultLocalisation TimingStatsMaxTimeId = "the time of maximum"-englishResultLocalisation TimingStatsStartTimeId = "the start time"-englishResultLocalisation TimingStatsLastTimeId = "the last time"-englishResultLocalisation TimingStatsSumId = "sum"-englishResultLocalisation TimingStatsSum2Id = "sum square"-englishResultLocalisation SamplingCounterId = "counter"-englishResultLocalisation SamplingCounterValueId = "current value"-englishResultLocalisation SamplingCounterStatsId = "statistics"-englishResultLocalisation TimingCounterId = "timing counter"-englishResultLocalisation TimingCounterValueId = "current value"-englishResultLocalisation TimingCounterStatsId = "statistics"-englishResultLocalisation FiniteQueueId = "the finite queue"-englishResultLocalisation InfiniteQueueId = "the infinite queue"-englishResultLocalisation EnqueueStrategyId = "the enqueueing strategy"-englishResultLocalisation EnqueueStoringStrategyId = "the storing strategy"-englishResultLocalisation DequeueStrategyId = "the dequeueing strategy"-englishResultLocalisation QueueNullId = "is the queue empty?"-englishResultLocalisation QueueFullId = "is the queue full?"-englishResultLocalisation QueueMaxCountId = "the queue capacity"-englishResultLocalisation QueueCountId = "the current queue size"-englishResultLocalisation QueueCountStatsId = "the queue size statistics"-englishResultLocalisation EnqueueCountId = "a total number of attempts to enqueue the items"-englishResultLocalisation EnqueueLostCountId = "a total number of the lost items when trying to enqueue"-englishResultLocalisation EnqueueStoreCountId = "a total number of the stored items"-englishResultLocalisation DequeueCountId = "a total number of requests for dequeueing"-englishResultLocalisation DequeueExtractCountId = "a total number of the dequeued items"-englishResultLocalisation QueueLoadFactorId = "the queue load (its size divided by its capacity)"-englishResultLocalisation EnqueueRateId = "how many attempts to enqueue per time?"-englishResultLocalisation EnqueueStoreRateId = "how many items were stored per time?"-englishResultLocalisation DequeueRateId = "how many requests for dequeueing per time?"-englishResultLocalisation DequeueExtractRateId = "how many items were dequeued per time?"-englishResultLocalisation QueueWaitTimeId = "the wait time (stored -> dequeued)"-englishResultLocalisation QueueTotalWaitTimeId = "the total wait time (tried to enqueue -> dequeued)"-englishResultLocalisation EnqueueWaitTimeId = "the enqueue wait time (tried to enqueue -> stored)"-englishResultLocalisation DequeueWaitTimeId = "the dequeue wait time (requested for dequeueing -> dequeued)"-englishResultLocalisation QueueRateId = "the average queue rate (= queue size / wait time)"-englishResultLocalisation ArrivalTimerId = "how long the arrivals are processed?"-englishResultLocalisation ArrivalProcessingTimeId = "the processing time of arrivals"-englishResultLocalisation ServerId = "the server"-englishResultLocalisation ServerInitStateId = "the initial state"-englishResultLocalisation ServerStateId = "the current state"-englishResultLocalisation ServerTotalInputWaitTimeId = "the total time spent while waiting for input"-englishResultLocalisation ServerTotalProcessingTimeId = "the total time spent on actual processing the tasks"-englishResultLocalisation ServerTotalOutputWaitTimeId = "the total time spent on delivering the output"-englishResultLocalisation ServerTotalPreemptionTimeId = "the total time spent being preempted"-englishResultLocalisation ServerInputWaitTimeId = "the time spent while waiting for input"-englishResultLocalisation ServerProcessingTimeId = "the time spent on processing the tasks"-englishResultLocalisation ServerOutputWaitTimeId = "the time spent on delivering the output"-englishResultLocalisation ServerPreemptionTimeId = "the time spent being preempted"-englishResultLocalisation ServerInputWaitFactorId = "the relative time spent while waiting for input (from 0 to 1)"-englishResultLocalisation ServerProcessingFactorId = "the relative time spent on processing the tasks (from 0 to 1)"-englishResultLocalisation ServerOutputWaitFactorId = "the relative time spent on delivering the output (from 0 to 1)"-englishResultLocalisation ServerPreemptionFactorId = "the relative time spent being preempted (from 0 to 1)"-englishResultLocalisation ActivityId = "the activity"-englishResultLocalisation ActivityInitStateId = "the initial state"-englishResultLocalisation ActivityStateId = "the current state"-englishResultLocalisation ActivityTotalUtilisationTimeId = "the total time of utilisation"-englishResultLocalisation ActivityTotalIdleTimeId = "the total idle time"-englishResultLocalisation ActivityTotalPreemptionTimeId = "the total time of preemption"-englishResultLocalisation ActivityUtilisationTimeId = "the utilisation time"-englishResultLocalisation ActivityIdleTimeId = "the idle time"-englishResultLocalisation ActivityPreemptionTimeId = "the preemption time"-englishResultLocalisation ActivityUtilisationFactorId = "the relative utilisation time (from 0 to 1)"-englishResultLocalisation ActivityIdleFactorId = "the relative idle time (от 0 до 1)"-englishResultLocalisation ActivityPreemptionFactorId = "the relative preemption time (from 0 to 1)"-englishResultLocalisation ResourceId = "the resource"-englishResultLocalisation ResourceCountId = "the current available count"-englishResultLocalisation ResourceCountStatsId = "the available count statistics"-englishResultLocalisation ResourceUtilisationCountId = "the current utilisation count"-englishResultLocalisation ResourceUtilisationCountStatsId = "the utilisation count statistics"-englishResultLocalisation ResourceQueueCountId = "the current queue length"-englishResultLocalisation ResourceQueueCountStatsId = "the queue length statistics"-englishResultLocalisation ResourceTotalWaitTimeId = "the total wait time"-englishResultLocalisation ResourceWaitTimeId = "the wait time"-englishResultLocalisation OperationId = "the operation"-englishResultLocalisation OperationTotalUtilisationTimeId = "the total time of utilisation"-englishResultLocalisation OperationTotalPreemptionTimeId = "the total time of preemption"-englishResultLocalisation OperationUtilisationTimeId = "the utilisation time"-englishResultLocalisation OperationPreemptionTimeId = "the preemption time"-englishResultLocalisation OperationUtilisationFactorId = "the relative utilisation time (from 0 to 1)"-englishResultLocalisation OperationPreemptionFactorId = "the relative preemption time (from 0 to 1)"-englishResultLocalisation (UserDefinedResultId m) = m-englishResultLocalisation x@(LocalisedResultId m) =-  lookupResultLocalisation englishResultLocale x+        ResultId(..),+        -- * Utilities+        resultNameToTitle) where --- | Lookup a localisation by the specified locale.-lookupResultLocalisation :: ResultLocale -> ResultLocalisation-lookupResultLocalisation loc (UserDefinedResultId m) = m-lookupResultLocalisation loc (LocalisedResultId m) =-  case M.lookup loc m of-    Just x -> x-    Nothing ->-      case M.lookup russianResultLocale m of-        Just x -> x-        Nothing ->-          case M.lookup englishResultLocale m of-            Just x -> x-            Nothing -> ""-lookupResultLocalisation loc resultId = russianResultLocalisation resultId+import Simulation.Aivika.Trans.Results.Locale.Types+import Simulation.Aivika.Trans.Results.Locale.Russian+import Simulation.Aivika.Trans.Results.Locale.English
+ Simulation/Aivika/Trans/Results/Locale/English.hs view
@@ -0,0 +1,231 @@++-- |+-- Module     : Simulation.Aivika.Trans.Results.Locale.English+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com>+-- License    : BSD3+-- Maintainer : David Sorokin <david.sorokin@gmail.com>+-- Stability  : experimental+-- Tested with: GHC 8.0.1+--+-- The English localisation.+--+module Simulation.Aivika.Trans.Results.Locale.English+       (englishResultLocalisation) where++import Simulation.Aivika.Trans.Results.Locale.Types++-- | The English localisation.+englishResultLocalisation :: ResultLocalisation+englishResultLocalisation = ResultLocalisation englishResultDescription englishResultTitle++-- | The English localisation of the simulation results.+englishResultDescription :: ResultId -> ResultDescription+englishResultDescription TimeId = "simulation time"+englishResultDescription VectorId = "vector"+englishResultDescription (VectorItemId x) = "item #" ++ x+englishResultDescription SamplingStatsId = "statistics summary"+englishResultDescription SamplingStatsCountId = "count"+englishResultDescription SamplingStatsMinId = "minimum"+englishResultDescription SamplingStatsMaxId = "maximum"+englishResultDescription SamplingStatsMeanId = "mean"+englishResultDescription SamplingStatsMean2Id = "mean square"+englishResultDescription SamplingStatsVarianceId = "variance"+englishResultDescription SamplingStatsDeviationId = "deviation"+englishResultDescription TimingStatsId = "timing statistics"+englishResultDescription TimingStatsCountId = "count"+englishResultDescription TimingStatsMinId = "minimum"+englishResultDescription TimingStatsMaxId = "maximum"+englishResultDescription TimingStatsMeanId = "mean"+englishResultDescription TimingStatsVarianceId = "variance"+englishResultDescription TimingStatsDeviationId = "deviation"+englishResultDescription TimingStatsMinTimeId = "the time of minimum"+englishResultDescription TimingStatsMaxTimeId = "the time of maximum"+englishResultDescription TimingStatsStartTimeId = "the start time"+englishResultDescription TimingStatsLastTimeId = "the last time"+englishResultDescription TimingStatsSumId = "sum"+englishResultDescription TimingStatsSum2Id = "sum square"+englishResultDescription SamplingCounterId = "counter"+englishResultDescription SamplingCounterValueId = "current value"+englishResultDescription SamplingCounterStatsId = "statistics"+englishResultDescription TimingCounterId = "timing counter"+englishResultDescription TimingCounterValueId = "current value"+englishResultDescription TimingCounterStatsId = "statistics"+englishResultDescription FiniteQueueId = "the finite queue"+englishResultDescription InfiniteQueueId = "the infinite queue"+englishResultDescription EnqueueStrategyId = "the enqueueing strategy"+englishResultDescription EnqueueStoringStrategyId = "the storing strategy"+englishResultDescription DequeueStrategyId = "the dequeueing strategy"+englishResultDescription QueueNullId = "is the queue empty?"+englishResultDescription QueueFullId = "is the queue full?"+englishResultDescription QueueMaxCountId = "the queue capacity"+englishResultDescription QueueCountId = "the current queue size"+englishResultDescription QueueCountStatsId = "the queue size statistics"+englishResultDescription EnqueueCountId = "a total number of attempts to enqueue the items"+englishResultDescription EnqueueLostCountId = "a total number of the lost items when trying to enqueue"+englishResultDescription EnqueueStoreCountId = "a total number of the stored items"+englishResultDescription DequeueCountId = "a total number of requests for dequeueing"+englishResultDescription DequeueExtractCountId = "a total number of the dequeued items"+englishResultDescription QueueLoadFactorId = "the queue load (its size divided by its capacity)"+englishResultDescription EnqueueRateId = "how many attempts to enqueue per time?"+englishResultDescription EnqueueStoreRateId = "how many items were stored per time?"+englishResultDescription DequeueRateId = "how many requests for dequeueing per time?"+englishResultDescription DequeueExtractRateId = "how many items were dequeued per time?"+englishResultDescription QueueWaitTimeId = "the wait time (stored -> dequeued)"+englishResultDescription QueueTotalWaitTimeId = "the total wait time (tried to enqueue -> dequeued)"+englishResultDescription EnqueueWaitTimeId = "the enqueue wait time (tried to enqueue -> stored)"+englishResultDescription DequeueWaitTimeId = "the dequeue wait time (requested for dequeueing -> dequeued)"+englishResultDescription QueueRateId = "the average queue rate (= queue size / wait time)"+englishResultDescription ArrivalTimerId = "how long the arrivals are processed?"+englishResultDescription ArrivalProcessingTimeId = "the processing time of arrivals"+englishResultDescription ServerId = "the server"+englishResultDescription ServerInitStateId = "the initial state"+englishResultDescription ServerStateId = "the current state"+englishResultDescription ServerTotalInputWaitTimeId = "the total time spent while waiting for input"+englishResultDescription ServerTotalProcessingTimeId = "the total time spent on actual processing the tasks"+englishResultDescription ServerTotalOutputWaitTimeId = "the total time spent on delivering the output"+englishResultDescription ServerTotalPreemptionTimeId = "the total time spent being preempted"+englishResultDescription ServerInputWaitTimeId = "the time spent while waiting for input"+englishResultDescription ServerProcessingTimeId = "the time spent on processing the tasks"+englishResultDescription ServerOutputWaitTimeId = "the time spent on delivering the output"+englishResultDescription ServerPreemptionTimeId = "the time spent being preempted"+englishResultDescription ServerInputWaitFactorId = "the relative time spent while waiting for input (from 0 to 1)"+englishResultDescription ServerProcessingFactorId = "the relative time spent on processing the tasks (from 0 to 1)"+englishResultDescription ServerOutputWaitFactorId = "the relative time spent on delivering the output (from 0 to 1)"+englishResultDescription ServerPreemptionFactorId = "the relative time spent being preempted (from 0 to 1)"+englishResultDescription ActivityId = "the activity"+englishResultDescription ActivityInitStateId = "the initial state"+englishResultDescription ActivityStateId = "the current state"+englishResultDescription ActivityTotalUtilisationTimeId = "the total time of utilisation"+englishResultDescription ActivityTotalIdleTimeId = "the total idle time"+englishResultDescription ActivityTotalPreemptionTimeId = "the total time of preemption"+englishResultDescription ActivityUtilisationTimeId = "the utilisation time"+englishResultDescription ActivityIdleTimeId = "the idle time"+englishResultDescription ActivityPreemptionTimeId = "the preemption time"+englishResultDescription ActivityUtilisationFactorId = "the relative utilisation time (from 0 to 1)"+englishResultDescription ActivityIdleFactorId = "the relative idle time (from 0 to 1)"+englishResultDescription ActivityPreemptionFactorId = "the relative preemption time (from 0 to 1)"+englishResultDescription ResourceId = "the resource"+englishResultDescription ResourceCountId = "the current available count"+englishResultDescription ResourceCountStatsId = "the available count statistics"+englishResultDescription ResourceUtilisationCountId = "the current utilisation count"+englishResultDescription ResourceUtilisationCountStatsId = "the utilisation count statistics"+englishResultDescription ResourceQueueCountId = "the current queue length"+englishResultDescription ResourceQueueCountStatsId = "the queue length statistics"+englishResultDescription ResourceTotalWaitTimeId = "the total wait time"+englishResultDescription ResourceWaitTimeId = "the wait time"+englishResultDescription OperationId = "the operation"+englishResultDescription OperationTotalUtilisationTimeId = "the total time of utilisation"+englishResultDescription OperationTotalPreemptionTimeId = "the total time of preemption"+englishResultDescription OperationUtilisationTimeId = "the utilisation time"+englishResultDescription OperationPreemptionTimeId = "the preemption time"+englishResultDescription OperationUtilisationFactorId = "the relative utilisation time (from 0 to 1)"+englishResultDescription OperationPreemptionFactorId = "the relative preemption time (from 0 to 1)"+englishResultDescription (UserDefinedResultId m) = userDefinedResultDescription m+englishResultDescription (LocalisedResultId m) =+  lookupResultLocalisation englishResultLocale (localisedResultDescriptions m)++-- | The English localisation of titles.+englishResultTitle :: ResultId -> ResultDescription+englishResultTitle TimeId = "time"+englishResultTitle VectorId = "vector"+englishResultTitle (VectorItemId x) = "item #" ++ x+englishResultTitle SamplingStatsId = "stats"+englishResultTitle SamplingStatsCountId = "count"+englishResultTitle SamplingStatsMinId = "minimum"+englishResultTitle SamplingStatsMaxId = "maximum"+englishResultTitle SamplingStatsMeanId = "mean"+englishResultTitle SamplingStatsMean2Id = "mean square"+englishResultTitle SamplingStatsVarianceId = "variance"+englishResultTitle SamplingStatsDeviationId = "deviation"+englishResultTitle TimingStatsId = "time-persistent stats"+englishResultTitle TimingStatsCountId = "count"+englishResultTitle TimingStatsMinId = "minimum"+englishResultTitle TimingStatsMaxId = "maximum"+englishResultTitle TimingStatsMeanId = "mean"+englishResultTitle TimingStatsVarianceId = "variance"+englishResultTitle TimingStatsDeviationId = "deviation"+englishResultTitle TimingStatsMinTimeId = "time of minimum"+englishResultTitle TimingStatsMaxTimeId = "time of maximum"+englishResultTitle TimingStatsStartTimeId = "start time"+englishResultTitle TimingStatsLastTimeId = "last time"+englishResultTitle TimingStatsSumId = "sum"+englishResultTitle TimingStatsSum2Id = "sum square"+englishResultTitle SamplingCounterId = "stats counter"+englishResultTitle SamplingCounterValueId = "current value"+englishResultTitle SamplingCounterStatsId = "stats"+englishResultTitle TimingCounterId = "time-persistent stats counter"+englishResultTitle TimingCounterValueId = "current value"+englishResultTitle TimingCounterStatsId = "time-persistent stats"+englishResultTitle FiniteQueueId = "bounded queue"+englishResultTitle InfiniteQueueId = "unbounded queue"+englishResultTitle EnqueueStrategyId = "enqueu strategy"+englishResultTitle EnqueueStoringStrategyId = "storing strategy"+englishResultTitle DequeueStrategyId = "dequeue strategy"+englishResultTitle QueueNullId = "empty queue?"+englishResultTitle QueueFullId = "full queue?"+englishResultTitle QueueMaxCountId = "queue capacity"+englishResultTitle QueueCountId = "queue length"+englishResultTitle QueueCountStatsId = "queue length stats"+englishResultTitle EnqueueCountId = "enqueue request count"+englishResultTitle EnqueueLostCountId = "failed enqueue count"+englishResultTitle EnqueueStoreCountId = "fulfilled enqueue count"+englishResultTitle DequeueCountId = "dequeue request count"+englishResultTitle DequeueExtractCountId = "fulfilled dequeue count"+englishResultTitle QueueLoadFactorId = "queue load"+englishResultTitle EnqueueRateId = "enqueue request rate"+englishResultTitle EnqueueStoreRateId = "fulfilled enqueue rate"+englishResultTitle DequeueRateId = "dequeue request rate"+englishResultTitle DequeueExtractRateId = "fulfilled dequeue rate"+englishResultTitle QueueWaitTimeId = "wait time"+englishResultTitle QueueTotalWaitTimeId = "total wait time"+englishResultTitle EnqueueWaitTimeId = "enqueue wait time"+englishResultTitle DequeueWaitTimeId = "dequeue wait time"+englishResultTitle QueueRateId = "queue rate"+englishResultTitle ArrivalTimerId = "measures arrival processing time"+englishResultTitle ArrivalProcessingTimeId = "arrival processing time"+englishResultTitle ServerId = "server"+englishResultTitle ServerInitStateId = "initial state"+englishResultTitle ServerStateId = "current state"+englishResultTitle ServerTotalInputWaitTimeId = "total input wait time"+englishResultTitle ServerTotalProcessingTimeId = "total processing time"+englishResultTitle ServerTotalOutputWaitTimeId = "total output wait time"+englishResultTitle ServerTotalPreemptionTimeId = "total preemption time"+englishResultTitle ServerInputWaitTimeId = "input wait time"+englishResultTitle ServerProcessingTimeId = "processing time"+englishResultTitle ServerOutputWaitTimeId = "output wait time"+englishResultTitle ServerPreemptionTimeId = "preemption time"+englishResultTitle ServerInputWaitFactorId = "relative input wait time"+englishResultTitle ServerProcessingFactorId = "relative processing time"+englishResultTitle ServerOutputWaitFactorId = "relative output wait time"+englishResultTitle ServerPreemptionFactorId = "relative preemption time"+englishResultTitle ActivityId = "activity"+englishResultTitle ActivityInitStateId = "initial state"+englishResultTitle ActivityStateId = "current state"+englishResultTitle ActivityTotalUtilisationTimeId = "total utilisation time"+englishResultTitle ActivityTotalIdleTimeId = "total idle time"+englishResultTitle ActivityTotalPreemptionTimeId = "total preemption time"+englishResultTitle ActivityUtilisationTimeId = "utilisation time"+englishResultTitle ActivityIdleTimeId = "idle time"+englishResultTitle ActivityPreemptionTimeId = "preemption time"+englishResultTitle ActivityUtilisationFactorId = "relative utilisation time"+englishResultTitle ActivityIdleFactorId = "relative idle time"+englishResultTitle ActivityPreemptionFactorId = "relative preemption time"+englishResultTitle ResourceId = "resource"+englishResultTitle ResourceCountId = "content"+englishResultTitle ResourceCountStatsId = "content stats"+englishResultTitle ResourceUtilisationCountId = "utilisation count"+englishResultTitle ResourceUtilisationCountStatsId = "utilisation count stats"+englishResultTitle ResourceQueueCountId = "queue length"+englishResultTitle ResourceQueueCountStatsId = "queue length stats"+englishResultTitle ResourceTotalWaitTimeId = "total wait time"+englishResultTitle ResourceWaitTimeId = "wait time"+englishResultTitle OperationId = "operation"+englishResultTitle OperationTotalUtilisationTimeId = "total utilisation time"+englishResultTitle OperationTotalPreemptionTimeId = "total preemption time"+englishResultTitle OperationUtilisationTimeId = "utilisation time"+englishResultTitle OperationPreemptionTimeId = "preemption time"+englishResultTitle OperationUtilisationFactorId = "relative utilisation time"+englishResultTitle OperationPreemptionFactorId = "relative preemption time"+englishResultTitle (UserDefinedResultId m) = userDefinedResultTitle m+englishResultTitle x@(LocalisedResultId m) =+  lookupResultLocalisation englishResultLocale (localisedResultTitles m)
+ Simulation/Aivika/Trans/Results/Locale/Russian.hs view
@@ -0,0 +1,231 @@++-- |+-- Module     : Simulation.Aivika.Trans.Results.Locale.Russian+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com>+-- License    : BSD3+-- Maintainer : David Sorokin <david.sorokin@gmail.com>+-- Stability  : experimental+-- Tested with: GHC 8.0.1+--+-- The Russian localisation.+--+module Simulation.Aivika.Trans.Results.Locale.Russian+       (russianResultLocalisation) where++import Simulation.Aivika.Trans.Results.Locale.Types++-- | The Russian localisation.+russianResultLocalisation :: ResultLocalisation+russianResultLocalisation = ResultLocalisation russianResultDescription russianResultTitle++-- | The Russian localisation of the simulation results.+russianResultDescription :: ResultId -> ResultDescription+russianResultDescription TimeId = "модельное время"+russianResultDescription VectorId = "вектор"+russianResultDescription (VectorItemId x) = "элемент с индексом " ++ x+russianResultDescription SamplingStatsId = "сводная статистика"+russianResultDescription SamplingStatsCountId = "количество"+russianResultDescription SamplingStatsMinId = "минимальное значение"+russianResultDescription SamplingStatsMaxId = "максимальное значение"+russianResultDescription SamplingStatsMeanId = "среднее значение"+russianResultDescription SamplingStatsMean2Id = "среднее квадратов"+russianResultDescription SamplingStatsVarianceId = "дисперсия"+russianResultDescription SamplingStatsDeviationId = "среднеквадратическое отклонение"+russianResultDescription TimingStatsId = "временная статистика"+russianResultDescription TimingStatsCountId = "количество"+russianResultDescription TimingStatsMinId = "минимальное значение"+russianResultDescription TimingStatsMaxId = "максимальное значение"+russianResultDescription TimingStatsMeanId = "среднее значение"+russianResultDescription TimingStatsVarianceId = "дисперсия"+russianResultDescription TimingStatsDeviationId = "среднеквадратическое отклонение"+russianResultDescription TimingStatsMinTimeId = "время достижения минимума"+russianResultDescription TimingStatsMaxTimeId = "время достижения максимума"+russianResultDescription TimingStatsStartTimeId = "начальное время сбора статистики"+russianResultDescription TimingStatsLastTimeId = "конечное время сбора статистики"+russianResultDescription TimingStatsSumId = "сумма"+russianResultDescription TimingStatsSum2Id = "сумма квадратов"+russianResultDescription SamplingCounterId = "счетчик"+russianResultDescription SamplingCounterValueId = "текущее значение"+russianResultDescription SamplingCounterStatsId = "статистика"+russianResultDescription TimingCounterId = "временной счетчик"+russianResultDescription TimingCounterValueId = "текущее значение"+russianResultDescription TimingCounterStatsId = "статистика"+russianResultDescription FiniteQueueId = "конечная очередь"+russianResultDescription InfiniteQueueId = "бесконечная очередь"+russianResultDescription EnqueueStrategyId = "стратегия добавления элементов"+russianResultDescription EnqueueStoringStrategyId = "стратегия хранения элементов"+russianResultDescription DequeueStrategyId = "стратегия извлечения элементов"+russianResultDescription QueueNullId = "очередь пуста?"+russianResultDescription QueueFullId = "очередь заполнена?"+russianResultDescription QueueMaxCountId = "емкость очереди"+russianResultDescription QueueCountId = "текущий размер очереди"+russianResultDescription QueueCountStatsId = "статистика по размеру очереди"+russianResultDescription EnqueueCountId = "общее количество попыток добавить элементы"+russianResultDescription EnqueueLostCountId = "общее количество неудачных попыток добавить элементы"+russianResultDescription EnqueueStoreCountId = "общее количество сохраненных элементов"+russianResultDescription DequeueCountId = "общее количество запросов на извлечение элементов"+russianResultDescription DequeueExtractCountId = "общее количество извлеченных элементов"+russianResultDescription QueueLoadFactorId = "коэфф. загрузки (размер, поделенный на емкость)"+russianResultDescription EnqueueRateId = "количество попыток добавить на ед. времени"+russianResultDescription EnqueueStoreRateId = "количество сохраненных на ед. времени"+russianResultDescription DequeueRateId = "количество запросов на извлечение в ед. времени"+russianResultDescription DequeueExtractRateId = "количество извлеченных на ед. времени"+russianResultDescription QueueWaitTimeId = "время ожидания (сохранили -> извлекли)"+russianResultDescription QueueTotalWaitTimeId = "общее время ожидания (попытались добавить -> извлекли)"+russianResultDescription EnqueueWaitTimeId = "время ожидания добавления (попытались добавить -> сохранили)"+russianResultDescription DequeueWaitTimeId = "время ожидания извлечения (запросили извлечь -> извлекли)"+russianResultDescription QueueRateId = "усредненная скорость (как средняя длина очереди на среднее время ожидания)"+russianResultDescription ArrivalTimerId = "как долго обрабатываются заявки?"+russianResultDescription ArrivalProcessingTimeId = "время обработки заявки"+russianResultDescription ServerId = "сервер"+russianResultDescription ServerInitStateId = "начальное состояние"+russianResultDescription ServerStateId = "текущее состояние"+russianResultDescription ServerTotalInputWaitTimeId = "общее время блокировки в ожидании ввода"+russianResultDescription ServerTotalProcessingTimeId = "общее время, потраченное на саму обработку заданий"+russianResultDescription ServerTotalOutputWaitTimeId = "общее время блокировки при попытке доставить вывод"+russianResultDescription ServerTotalPreemptionTimeId = "общее время вытеснения"+russianResultDescription ServerInputWaitTimeId = "время блокировки в ожидании ввода"+russianResultDescription ServerProcessingTimeId = "время, потраченное на саму обработку заданий"+russianResultDescription ServerOutputWaitTimeId = "время блокировки при попытке доставить вывод"+russianResultDescription ServerPreemptionTimeId = "время вытеснения"+russianResultDescription ServerInputWaitFactorId = "относительное время блокировки в ожидании ввода (от 0 до 1)"+russianResultDescription ServerProcessingFactorId = "относительное время, потраченное на саму обработку заданий (от 0 до 1)"+russianResultDescription ServerOutputWaitFactorId = "относительное время блокировки при попытке доставить вывод (от 0 до 1)"+russianResultDescription ServerPreemptionFactorId = "относительное время вытеснения (от 0 до 1)"+russianResultDescription ActivityId = "активность"+russianResultDescription ActivityInitStateId = "начальное состояние"+russianResultDescription ActivityStateId = "текущее состояние"+russianResultDescription ActivityTotalUtilisationTimeId = "общее время использования"+russianResultDescription ActivityTotalIdleTimeId = "общее время простоя"+russianResultDescription ActivityTotalPreemptionTimeId = "общее время вытеснения"+russianResultDescription ActivityUtilisationTimeId = "статистика времени использования"+russianResultDescription ActivityIdleTimeId = "статистика времени простоя"+russianResultDescription ActivityPreemptionTimeId = "статистика времени вытеснения"+russianResultDescription ActivityUtilisationFactorId = "относительное время использования (от 0 до 1)"+russianResultDescription ActivityIdleFactorId = "относительное время простоя (от 0 до 1)"+russianResultDescription ActivityPreemptionFactorId = "относительное время вытеснения (от 0 до 1)"+russianResultDescription ResourceId = "ресурс"+russianResultDescription ResourceCountId = "текущее доступное количество ресурса"+russianResultDescription ResourceCountStatsId = "статистика по доступному количеству ресурса"+russianResultDescription ResourceUtilisationCountId = "текущее используемое количество ресурса"+russianResultDescription ResourceUtilisationCountStatsId = "статистика по используемому количеству ресурса"+russianResultDescription ResourceQueueCountId = "текущая длина очереди к ресурсу"+russianResultDescription ResourceQueueCountStatsId = "статистика длины очереди к ресурсу"+russianResultDescription ResourceTotalWaitTimeId = "общее время ожидания ресурса"+russianResultDescription ResourceWaitTimeId = "время ожидания ресурса"+russianResultDescription OperationId = "операция"+russianResultDescription OperationTotalUtilisationTimeId = "общее время использования"+russianResultDescription OperationTotalPreemptionTimeId = "общее время вытеснения"+russianResultDescription OperationUtilisationTimeId = "статистика времени использования"+russianResultDescription OperationPreemptionTimeId = "статистика времени вытеснения"+russianResultDescription OperationUtilisationFactorId = "относительное время использования (от 0 до 1)"+russianResultDescription OperationPreemptionFactorId = "относительное время вытеснения (от 0 до 1)"+russianResultDescription (UserDefinedResultId m) = userDefinedResultDescription m+russianResultDescription (LocalisedResultId m) =+  lookupResultLocalisation russianResultLocale (localisedResultDescriptions m)++-- | The Russian localisation of titles.+russianResultTitle :: ResultId -> ResultDescription+russianResultTitle TimeId = "время"+russianResultTitle VectorId = "вектор"+russianResultTitle (VectorItemId x) = "элемент с индексом " ++ x+russianResultTitle SamplingStatsId = "статистика"+russianResultTitle SamplingStatsCountId = "количество"+russianResultTitle SamplingStatsMinId = "минимум"+russianResultTitle SamplingStatsMaxId = "максимум"+russianResultTitle SamplingStatsMeanId = "среднее"+russianResultTitle SamplingStatsMean2Id = "среднее квадратов"+russianResultTitle SamplingStatsVarianceId = "дисперсия"+russianResultTitle SamplingStatsDeviationId = "отклонение"+russianResultTitle TimingStatsId = "временная статистика"+russianResultTitle TimingStatsCountId = "количество"+russianResultTitle TimingStatsMinId = "минимум"+russianResultTitle TimingStatsMaxId = "максимум"+russianResultTitle TimingStatsMeanId = "среднее"+russianResultTitle TimingStatsVarianceId = "дисперсия"+russianResultTitle TimingStatsDeviationId = "отклонение"+russianResultTitle TimingStatsMinTimeId = "время достижения минимума"+russianResultTitle TimingStatsMaxTimeId = "время достижения максимума"+russianResultTitle TimingStatsStartTimeId = "начальное время сбора статистики"+russianResultTitle TimingStatsLastTimeId = "конечное время сбора статистики"+russianResultTitle TimingStatsSumId = "сумма"+russianResultTitle TimingStatsSum2Id = "сумма квадратов"+russianResultTitle SamplingCounterId = "счетчик"+russianResultTitle SamplingCounterValueId = "текущее значение"+russianResultTitle SamplingCounterStatsId = "статистика"+russianResultTitle TimingCounterId = "временной счетчик"+russianResultTitle TimingCounterValueId = "текущее значение"+russianResultTitle TimingCounterStatsId = "статистика"+russianResultTitle FiniteQueueId = "конечная очередь"+russianResultTitle InfiniteQueueId = "бесконечная очередь"+russianResultTitle EnqueueStrategyId = "стратегия добавления элементов"+russianResultTitle EnqueueStoringStrategyId = "стратегия хранения элементов"+russianResultTitle DequeueStrategyId = "стратегия извлечения элементов"+russianResultTitle QueueNullId = "очередь пуста?"+russianResultTitle QueueFullId = "очередь заполнена?"+russianResultTitle QueueMaxCountId = "емкость очереди"+russianResultTitle QueueCountId = "длина очереди"+russianResultTitle QueueCountStatsId = "статистика по длине очереди"+russianResultTitle EnqueueCountId = "кол-во попыток добавить"+russianResultTitle EnqueueLostCountId = "кол-во неудачных попыток добавить"+russianResultTitle EnqueueStoreCountId = "кол-во сохраненных"+russianResultTitle DequeueCountId = "кол-во запросов на извлечение"+russianResultTitle DequeueExtractCountId = "кол-во извлеченных"+russianResultTitle QueueLoadFactorId = "коэфф. загрузки"+russianResultTitle EnqueueRateId = "кол-во попыток добавить на ед. времени"+russianResultTitle EnqueueStoreRateId = "кол-во сохраненных на ед. времени"+russianResultTitle DequeueRateId = "кол-во запросов на извлечение в ед. времени"+russianResultTitle DequeueExtractRateId = "кол-во извлеченных на ед. времени"+russianResultTitle QueueWaitTimeId = "время ожидания"+russianResultTitle QueueTotalWaitTimeId = "общее время ожидания"+russianResultTitle EnqueueWaitTimeId = "время ожидания добавления"+russianResultTitle DequeueWaitTimeId = "время ожидания извлечения"+russianResultTitle QueueRateId = "усредненная скорость"+russianResultTitle ArrivalTimerId = "измеряет время обработки заявки"+russianResultTitle ArrivalProcessingTimeId = "время обработки заявки"+russianResultTitle ServerId = "сервер"+russianResultTitle ServerInitStateId = "начальное состояние"+russianResultTitle ServerStateId = "текущее состояние"+russianResultTitle ServerTotalInputWaitTimeId = "общее время ожидания ввода"+russianResultTitle ServerTotalProcessingTimeId = "общее время обработки"+russianResultTitle ServerTotalOutputWaitTimeId = "общее время ожидания вывода"+russianResultTitle ServerTotalPreemptionTimeId = "общее время вытеснения"+russianResultTitle ServerInputWaitTimeId = "время ожидания ввода"+russianResultTitle ServerProcessingTimeId = "время обработки"+russianResultTitle ServerOutputWaitTimeId = "время ожидания вывода"+russianResultTitle ServerPreemptionTimeId = "время вытеснения"+russianResultTitle ServerInputWaitFactorId = "относит. время ожидания ввода"+russianResultTitle ServerProcessingFactorId = "относит. время обработки"+russianResultTitle ServerOutputWaitFactorId = "относит. время ожидания вывода"+russianResultTitle ServerPreemptionFactorId = "относит. время вытеснения"+russianResultTitle ActivityId = "активность"+russianResultTitle ActivityInitStateId = "начальное состояние"+russianResultTitle ActivityStateId = "текущее состояние"+russianResultTitle ActivityTotalUtilisationTimeId = "общее время использования"+russianResultTitle ActivityTotalIdleTimeId = "общее время простоя"+russianResultTitle ActivityTotalPreemptionTimeId = "общее время вытеснения"+russianResultTitle ActivityUtilisationTimeId = "время использования"+russianResultTitle ActivityIdleTimeId = "время простоя"+russianResultTitle ActivityPreemptionTimeId = "время вытеснения"+russianResultTitle ActivityUtilisationFactorId = "относит. время использования"+russianResultTitle ActivityIdleFactorId = "относит. время простоя"+russianResultTitle ActivityPreemptionFactorId = "относит. время вытеснения"+russianResultTitle ResourceId = "ресурс"+russianResultTitle ResourceCountId = "текущее кол-во"+russianResultTitle ResourceCountStatsId = "стат. по кол-ву"+russianResultTitle ResourceUtilisationCountId = "текущее используемое кол-во"+russianResultTitle ResourceUtilisationCountStatsId = "стат. по используемому кол-ву"+russianResultTitle ResourceQueueCountId = "текущая длина очереди"+russianResultTitle ResourceQueueCountStatsId = "стат. длины очереди"+russianResultTitle ResourceTotalWaitTimeId = "общее время ожидания"+russianResultTitle ResourceWaitTimeId = "время ожидания"+russianResultTitle OperationId = "операция"+russianResultTitle OperationTotalUtilisationTimeId = "общее время использования"+russianResultTitle OperationTotalPreemptionTimeId = "общее время вытеснения"+russianResultTitle OperationUtilisationTimeId = "стат. времени использования"+russianResultTitle OperationPreemptionTimeId = "стат. времени вытеснения"+russianResultTitle OperationUtilisationFactorId = "относит. время использования"+russianResultTitle OperationPreemptionFactorId = "относит. время вытеснения"+russianResultTitle (UserDefinedResultId m) = userDefinedResultTitle m+russianResultTitle (LocalisedResultId m) =+  lookupResultLocalisation russianResultLocale (localisedResultTitles m)
+ Simulation/Aivika/Trans/Results/Locale/Types.hs view
@@ -0,0 +1,336 @@++-- |+-- Module     : Simulation.Aivika.Trans.Results.Locale.Types+-- Copyright  : Copyright (c) 2009-2017, David Sorokin <david.sorokin@gmail.com>+-- License    : BSD3+-- Maintainer : David Sorokin <david.sorokin@gmail.com>+-- Stability  : experimental+-- Tested with: GHC 8.0.1+--+-- The module defines basic definitions for localisation.+--+module Simulation.Aivika.Trans.Results.Locale.Types+       (-- * Basic Types+        ResultLocale,+        ResultLocalisation(..),+        ResultName,+        ResultDescription,+        UserDefinedResult(..),+        LocalisedResult(..),+        -- * Locale Codes+        russianResultLocale,+        englishResultLocale,+        -- * Localisations+        pathResultLocalisation,+        localisePathResultDescription,+        localisePathResultTitle,+        lookupResultLocalisation,+        -- * Unique Identifiers+        ResultId(..),+        -- * Utilities+        resultNameToTitle) where++import Data.Char+import Data.List+import qualified Data.Map as M++import Simulation.Aivika.Trans.Dynamics+import Simulation.Aivika.Trans.Statistics+import Simulation.Aivika.Trans.Statistics.Accumulator+import qualified Simulation.Aivika.Trans.Queue as Q+import qualified Simulation.Aivika.Trans.Queue.Infinite as IQ+import Simulation.Aivika.Trans.Arrival+import Simulation.Aivika.Trans.Server+import Simulation.Aivika.Trans.Activity+import Simulation.Aivika.Trans.Resource+import Simulation.Aivika.Trans.Operation++-- | A locale to output the simulation results.+--+-- Examples are: @\"ru\", @\"en\" etc.+type ResultLocale = String++-- | It localises the description and title of simulation results.+data ResultLocalisation =+  ResultLocalisation { localiseResultDescription :: ResultId -> ResultDescription,+                       -- ^ Localise the description.+                       localiseResultTitle :: ResultId -> ResultDescription+                       -- ^ Localise the title.+                     }++-- | It describes the user-defined simulation result.+data UserDefinedResult =+  UserDefinedResult { userDefinedResultName :: ResultName,+                      -- ^ The user-defined result name.+                      userDefinedResultDescription :: ResultDescription,+                      -- ^ The user-defined result description.+                      userDefinedResultTitle :: ResultDescription+                      -- ^ The user-defined result title.+                    } deriving (Eq, Ord, Show)++-- | This is a localisation of the specified simulation result.+data LocalisedResult =+  LocalisedResult { localisedResultDescriptions :: M.Map ResultLocale ResultDescription,+                    -- ^ The localised descriptions.+                    localisedResultTitles :: M.Map ResultLocale ResultDescription+                    -- ^ The localised titles.+                  } deriving (Eq, Ord, Show)++-- | A name used for indentifying the results when generating output.+type ResultName = String++-- | A description used for describing the results when generating output.+type ResultDescription = String++-- | The result entity identifier.+data ResultId = TimeId+                -- ^ A 'time' computation.+              | VectorId+                -- ^ Describes a vector.+              | VectorItemId String+                -- ^ Describes a vector item with the specified subscript.+              | SamplingStatsId+                -- ^ A 'SamplingStats' value.+              | SamplingStatsCountId+                -- ^ Property 'samplingStatsCount'.+              | SamplingStatsMinId+                -- ^ Property 'samplingStatsMin'.+              | SamplingStatsMaxId+                -- ^ Property 'samplingStatsMax'.+              | SamplingStatsMeanId+                -- ^ Property 'samplingStatsMean'.+              | SamplingStatsMean2Id+                -- ^ Property 'samplingStatsMean2'.+              | SamplingStatsVarianceId+                -- ^ Property 'samplingStatsVariance'.+              | SamplingStatsDeviationId+                -- ^ Property 'samplingStatsDeviation'.+              | SamplingCounterId+                -- ^ A 'SamplingCounter' value.+              | SamplingCounterValueId+                -- ^ Property 'samplingCounterValue'.+              | SamplingCounterStatsId+                -- ^ Property 'samplingCounterStats'.+              | TimingStatsId+                -- ^ A 'TimingStats' value.+              | TimingStatsCountId+                -- ^ Property 'timingStatsCount'.+              | TimingStatsMinId+                -- ^ Property 'timingStatsMin'.+              | TimingStatsMaxId+                -- ^ Property 'timingStatsMax'.+              | TimingStatsMeanId+                -- ^ Property 'timingStatsMean'.+              | TimingStatsVarianceId+                -- ^ Property 'timingStatsVariance'.+              | TimingStatsDeviationId+                -- ^ Property 'timingStatsDeviation'.+              | TimingStatsMinTimeId+                -- ^ Property 'timingStatsMinTime'.+              | TimingStatsMaxTimeId+                -- ^ Property 'timingStatsMaxTime'.+              | TimingStatsStartTimeId+                -- ^ Property 'timingStatsStartTime'.+              | TimingStatsLastTimeId+                -- ^ Property 'timingStatsLastTime'.+              | TimingStatsSumId+                -- ^ Property 'timingStatsSum'.+              | TimingStatsSum2Id+                -- ^ Property 'timingStatsSum2'.+              | TimingCounterId+                -- ^ A 'TimingCounter' value.+              | TimingCounterValueId+                -- ^ Property 'timingCounterValue'.+              | TimingCounterStatsId+                -- ^ Property 'timingCounterStats'.+              | FiniteQueueId+                -- ^ A finite 'Q.Queue'.+              | InfiniteQueueId+                -- ^ An infinite 'IQ.Queue'.+              | EnqueueStrategyId+                -- ^ Property 'Q.enqueueStrategy'.+              | EnqueueStoringStrategyId+                -- ^ Property 'Q.enqueueStoringStrategy'.+              | DequeueStrategyId+                -- ^ Property 'Q.dequeueStrategy'.+              | QueueNullId+                -- ^ Property 'Q.queueNull'.+              | QueueFullId+                -- ^ Property 'Q.queueFull'.+              | QueueMaxCountId+                -- ^ Property 'Q.queueMaxCount'.+              | QueueCountId+                -- ^ Property 'Q.queueCount'.+              | QueueCountStatsId+                -- ^ Property 'Q.queueCountStats'.+              | EnqueueCountId+                -- ^ Property 'Q.enqueueCount'.+              | EnqueueLostCountId+                -- ^ Property 'Q.enqueueLostCount'.+              | EnqueueStoreCountId+                -- ^ Property 'Q.enqueueStoreCount'.+              | DequeueCountId+                -- ^ Property 'Q.dequeueCount'.+              | DequeueExtractCountId+                -- ^ Property 'Q.dequeueExtractCount'.+              | QueueLoadFactorId+                -- ^ Property 'Q.queueLoadFactor'.+              | EnqueueRateId+                -- ^ Property 'Q.enqueueRate'.+              | EnqueueStoreRateId+                -- ^ Property 'Q.enqueueStoreRate'.+              | DequeueRateId+                -- ^ Property 'Q.dequeueRate'.+              | DequeueExtractRateId+                -- ^ Property 'Q.dequeueExtractRate'.+              | QueueWaitTimeId+                -- ^ Property 'Q.queueWaitTime'.+              | QueueTotalWaitTimeId+                -- ^ Property 'Q.queueTotalWaitTime'.+              | EnqueueWaitTimeId+                -- ^ Property 'Q.enqueueWaitTime'.+              | DequeueWaitTimeId+                -- ^ Property 'Q.dequeueWaitTime'.+              | QueueRateId+                -- ^ Property 'Q.queueRate'.+              | ArrivalTimerId+                -- ^ An 'ArrivalTimer'.+              | ArrivalProcessingTimeId+                -- ^ Property 'arrivalProcessingTime'.+              | ServerId+                -- ^ Represents a 'Server'.+              | ServerInitStateId+                -- ^ Property 'serverInitState'.+              | ServerStateId+                -- ^ Property 'serverState'.+              | ServerTotalInputWaitTimeId+                -- ^ Property 'serverTotalInputWaitTime'.+              | ServerTotalProcessingTimeId+                -- ^ Property 'serverTotalProcessingTime'.+              | ServerTotalOutputWaitTimeId+                -- ^ Property 'serverTotalOutputWaitTime'.+              | ServerTotalPreemptionTimeId+                -- ^ Property 'serverTotalPreemptionTime'.+              | ServerInputWaitTimeId+                -- ^ Property 'serverInputWaitTime'.+              | ServerProcessingTimeId+                -- ^ Property 'serverProcessingTime'.+              | ServerOutputWaitTimeId+                -- ^ Property 'serverOutputWaitTime'.+              | ServerPreemptionTimeId+                -- ^ Property 'serverPreemptionTime'.+              | ServerInputWaitFactorId+                -- ^ Property 'serverInputWaitFactor'.+              | ServerProcessingFactorId+                -- ^ Property 'serverProcessingFactor'.+              | ServerOutputWaitFactorId+                -- ^ Property 'serverOutputWaitFactor'.+              | ServerPreemptionFactorId+                -- ^ Property 'serverPreemptionFactor'.+              | ActivityId+                -- ^ Represents an 'Activity'.+              | ActivityInitStateId+                -- ^ Property 'activityInitState'.+              | ActivityStateId+                -- ^ Property 'activityState'.+              | ActivityTotalUtilisationTimeId+                -- ^ Property 'activityTotalUtilisationTime'.+              | ActivityTotalIdleTimeId+                -- ^ Property 'activityTotalIdleTime'.+              | ActivityTotalPreemptionTimeId+                -- ^ Property 'activityTotalPreemptionTime'.+              | ActivityUtilisationTimeId+                -- ^ Property 'activityUtilisationTime'.+              | ActivityIdleTimeId+                -- ^ Property 'activityIdleTime'.+              | ActivityPreemptionTimeId+                -- ^ Property 'activityPreemptionTime'.+              | ActivityUtilisationFactorId+                -- ^ Property 'activityUtilisationFactor'.+              | ActivityIdleFactorId+                -- ^ Property 'activityIdleFactor'.+              | ActivityPreemptionFactorId+                -- ^ Property 'activityPreemptionFactor'.+              | ResourceId+                -- ^ Represents a 'Resource'.+              | ResourceCountId+                -- ^ Property 'resourceCount'.+              | ResourceCountStatsId+                -- ^ Property 'resourceCountStats'.+              | ResourceUtilisationCountId+                -- ^ Property 'resourceUtilisationCount'.+              | ResourceUtilisationCountStatsId+                -- ^ Property 'resourceUtilisationCountStats'.+              | ResourceQueueCountId+                -- ^ Property 'resourceQueueCount'.+              | ResourceQueueCountStatsId+                -- ^ Property 'resourceQueueCountStats'.+              | ResourceTotalWaitTimeId+                -- ^ Property 'resourceTotalWaitTime'.+              | ResourceWaitTimeId+                -- ^ Property 'resourceWaitTime'.+              | OperationId+                -- ^ Represents an 'Operation'.+              | OperationTotalUtilisationTimeId+                -- ^ Property 'operationTotalUtilisationTime'.+              | OperationTotalPreemptionTimeId+                -- ^ Property 'operationTotalPreemptionTime'.+              | OperationUtilisationTimeId+                -- ^ Property 'operationUtilisationTime'.+              | OperationPreemptionTimeId+                -- ^ Property 'operationPreemptionTime'.+              | OperationUtilisationFactorId+                -- ^ Property 'operationUtilisationFactor'.+              | OperationPreemptionFactorId+                -- ^ Property 'operationPreemptionFactor'.+              | UserDefinedResultId UserDefinedResult+                -- ^ An user defined description.+              | LocalisedResultId LocalisedResult+                -- ^ A localised property or object name.+              deriving (Eq, Ord, Show)++-- | The Russian locale.+russianResultLocale :: ResultLocale+russianResultLocale = "ru"++-- | The English locale.+englishResultLocale :: ResultLocale+englishResultLocale = "en"++-- | Lookup a localisation by the specified locale.+lookupResultLocalisation :: ResultLocale -> M.Map ResultLocale ResultDescription -> ResultDescription+lookupResultLocalisation loc m =+  case M.lookup loc m of+    Just x  -> x+    Nothing ->+      case M.lookup russianResultLocale m of+        Just x  -> x+        Nothing ->+          case M.lookup englishResultLocale m of+            Just x  -> x+            Nothing -> ""++-- | Return the path result localisation.+pathResultLocalisation :: (ResultId -> ResultDescription) -> [ResultId] -> ResultDescription+pathResultLocalisation loc is = loop is []+  where loop [] acc                      = foldr ($) [] (reverse acc)+        loop (x : xs) []                 = loop xs [(loc x ++)]+        loop ((VectorItemId s) : xs) acc = loop xs $ (s ++) : (" " ++) : acc+        loop (x : xs) acc                = loop xs $ (loc x ++) : (" / " ++) : acc++-- | Localise the path result description.+localisePathResultDescription :: ResultLocalisation -> [ResultId] -> ResultDescription+localisePathResultDescription loc is = pathResultLocalisation (localiseResultDescription loc) is++-- | Localise the path result title.+localisePathResultTitle :: ResultLocalisation -> [ResultId] -> ResultDescription+localisePathResultTitle loc is = pathResultLocalisation (localiseResultTitle loc) is++-- | Convert the result name to title.+resultNameToTitle :: ResultName -> ResultDescription+resultNameToTitle =+  unwords .+  concat .+  map (map $ map toLower) .+  map (groupBy (\x y -> not $ isUpper y)) .+  words
Simulation/Aivika/Trans/Signal.hs view
@@ -52,6 +52,7 @@         newSignalInIntegTimes,         newSignalInStartTime,         newSignalInStopTime,+        newSignalInTimeGrid,         -- * Signalable Computations         Signalable(..),         signalableChanged,@@ -409,6 +410,20 @@   do s <- liftSimulation newSignalSource      t <- liftParameter stoptime      enqueueEvent t $ triggerSignalWithCurrentTime s+     return $ publishSignal s++-- | Return a signal that is trigged in the grid by specified size.+newSignalInTimeGrid :: MonadDES m => Int -> Event m (Signal m Int)+{-# INLINABLE newSignalInTimeGrid #-}+-- | Return a signal that is trigged in the grid by specified size.+newSignalInTimeGrid n =+  do sc <- liftParameter simulationSpecs+     s  <- liftSimulation newSignalSource+     let loop []            = return ()+         loop ((i, t) : xs) = enqueueEvent t $+                              do triggerSignal s i+                                 loop xs+     loop $ timeGrid sc n      return $ publishSignal s  -- | Describes a computation that also signals when changing its value.
Simulation/Aivika/Trans/Specs.hs view
@@ -20,6 +20,7 @@         integPhaseBnds,         integPhaseHiBnd,         integPhaseLoBnd,-        integTimes) where+        integTimes,+        timeGrid) where  import Simulation.Aivika.Trans.Internal.Specs
Simulation/Aivika/Trans/Var.hs view
@@ -14,6 +14,12 @@ -- allows using the variable in differential and difference equations of -- System Dynamics within hybrid discrete-continuous simulation. --+-- Because of using the arrays, it would usually be a logical mistake to+-- use this variable for collecting statistics. In most cases,+-- the statistics can actually be collected with a very small footprint+-- by updating immutable 'SamplingStats' and 'TimingStats' values in+-- a mutable 'Ref' reference.+-- module Simulation.Aivika.Trans.Var (MonadVar(..)) where  import Data.Array@@ -24,19 +30,24 @@ import Simulation.Aivika.Trans.Internal.Dynamics import Simulation.Aivika.Trans.Internal.Event import Simulation.Aivika.Trans.Signal+import Simulation.Aivika.Trans.Statistics  -- | A type class of monads within which we can create mutable variables. class MonadDES m => MonadVar m where    -- | Like the 'Ref' reference but keeps the history of changes in    -- different time points. The 'Var' variable is safe to be used in-  -- the hybrid discrete-continuous simulation.+  -- the hybrid discrete-continuous simulation. Only this variable can+  -- be much slower than the reference.   ---  -- For example, the memoised values of a variable can be used in-  -- the differential or difference equations of System Dynamics, while-  -- the variable iself can be updated wihin the discrete event simulation.+  -- For example, the memoised values of the variable can be used in+  -- the differential and difference equations of System Dynamics, while+  -- the variable iself can be updated within the discrete event simulation.   ---  -- Only this variable is much slower than the reference.+  -- Because of using arrays, it would usually be a logical mistake to use+  -- the variable for collecting statistics. In most cases, the statistics+  -- can actually be collected with a very small footprint by updating immutable+  -- 'SamplingStats' and 'TimingStats' values in a mutable @Ref@ reference.   data Var m a         -- | Create a new variable.@@ -51,7 +62,7 @@      -- | Read the recent actual value of a variable for the requested time.   ---  -- This computation is destined for using within discrete event simulation.+  -- This computation is destined to be used within discrete event simulation.   readVar :: Var m a -> Event m a      -- | Write a new value into the variable.@@ -60,7 +71,7 @@   -- | Mutate the contents of the variable.   modifyVar :: Var m a -> (a -> a) -> Event m () -  -- | Freeze the variable and return in arrays the time points and corresponded +  -- | Freeze the variable and return in arrays the time points and the corresponding    -- first and last values when the variable had changed or had been memoised in   -- different time points: (1) the time points are sorted in ascending order;   -- (2) the first and last actual values per each time point are provided.
Simulation/Aivika/Trans/Var/Unboxed.hs view
@@ -14,6 +14,12 @@ -- allows using the variable in differential and difference equations of -- System Dynamics within hybrid discrete-continuous simulation. --+-- Because of using the arrays, it would usually be a logical mistake to+-- use this variable for collecting statistics. In most cases,+-- the statistics can actually be collected with a very small footprint+-- by updating immutable 'SamplingStats' and 'TimingStats' values in+-- a mutable 'Ref' reference.+-- module Simulation.Aivika.Trans.Var.Unboxed (MonadVar(..)) where  import Data.Array@@ -24,19 +30,24 @@ import Simulation.Aivika.Trans.Internal.Dynamics import Simulation.Aivika.Trans.Internal.Event import Simulation.Aivika.Trans.Signal+import Simulation.Aivika.Trans.Statistics  -- | A type class of monads within which we can create mutable unboxed variables. class MonadDES m => MonadVar m a where    -- | Like the 'Ref' reference but keeps the history of changes in    -- different time points. The 'Var' variable is safe to be used in-  -- the hybrid discrete-continuous simulation.+  -- the hybrid discrete-continuous simulation. Only this variable can+  -- be much slower than the reference.   ---  -- For example, the memoised values of a variable can be used in-  -- the differential or difference equations of System Dynamics, while-  -- the variable iself can be updated wihin the discrete event simulation.+  -- For example, the memoised values of the variable can be used in+  -- the differential and difference equations of System Dynamics, while+  -- the variable iself can be updated within the discrete event simulation.   ---  -- Only this variable is much slower than the reference.+  -- Because of using arrays, it would usually be a logical mistake to use+  -- the variable for collecting statistics. In most cases, the statistics+  -- can actually be collected with a very small footprint by updating immutable+  -- 'SamplingStats' and 'TimingStats' values in a mutable @Ref@ reference.   data Var m a         -- | Create a new variable.@@ -51,7 +62,7 @@      -- | Read the recent actual value of a variable for the requested time.   ---  -- This computation is destined for using within discrete event simulation.+  -- This computation is destined to be used within discrete event simulation.   readVar :: Var m a -> Event m a      -- | Write a new value into the variable.@@ -60,7 +71,7 @@   -- | Mutate the contents of the variable.   modifyVar :: Var m a -> (a -> a) -> Event m () -  -- | Freeze the variable and return in arrays the time points and corresponded +  -- | Freeze the variable and return in arrays the time points and the corresponding    -- first and last values when the variable had changed or had been memoised in   -- different time points: (1) the time points are sorted in ascending order;   -- (2) the first and last actual values per each time point are provided.
aivika-transformers.cabal view
@@ -1,5 +1,5 @@ name:            aivika-transformers-version:         5.2+version:         5.3 synopsis:        Transformers for the Aivika simulation library description:     This package is a generalization of the aivika [1] simulation library@@ -122,6 +122,9 @@                      Simulation.Aivika.Trans.Resource.Preemption                      Simulation.Aivika.Trans.Resource.Preemption.Base                      Simulation.Aivika.Trans.Results.Locale+                     Simulation.Aivika.Trans.Results.Locale.Russian+                     Simulation.Aivika.Trans.Results.Locale.English+                     Simulation.Aivika.Trans.Results.Locale.Types                      Simulation.Aivika.Trans.Results                      Simulation.Aivika.Trans.Results.IO                      Simulation.Aivika.Trans.Results.Transform@@ -172,7 +175,7 @@                      random >= 1.0.0.3,                      mwc-random >= 0.13.0.0,                      vector >= 0.10.0.1,-                     aivika >= 5.2+                     aivika >= 5.3      other-extensions:   FlexibleContexts,                         FlexibleInstances,@@ -185,6 +188,7 @@                         ExistentialQuantification,                         TypeFamilies,                         TypeSynonymInstances,+                        MonoLocalBinds,                         DeriveDataTypeable,                         RankNTypes,                         ConstrainedClassMethods,