name:            aivika-gpss
version:         0.7.0
synopsis:        GPSS-like DSL for Aivika
description:
    This package allows defining simulation models in terms of a GPSS-like
    domain specific language, which can be useful if you are going to 
    translate your models from GPSS into Aivika [1, 2].
    .
    Note that the GPSS-like domain specific language is not equivalent to 
    the original GPSS language, but it may return very similar results in 
    some cases, while it can also return quite different results in other cases.
    .
    The package implements the most of GPSS simulation blocks, but the main difference
    is as follows.
    .
    Like GPSS, the package tries to treat the transact priorities properly within each block.
    Here it works in a very similar way even for such non-trivial blocks as PREEMPT, GATHER
    and ASSEMBLE. But unlike GPSS, the blocks behave independently from each other, where 
    the transact priorities are not used when deciding which of the blocks will be activated next.
    The order of activating the blocks is unpredictable.
    .
    There is a layer of emulation. The package creates a new discontinuous process for each new transact. 
    Then that process becomes fully responsible for processing the transact by the blocks. Therefore, 
    the speed of simulation is slower than it could be when implementing the same model but based on 
    using the standard Aivika facilities. 
    .
    The rough estimation is that this particular package is slower in 2-3 times than the existent GPSS 
    simulators in case of sequential simulation. But the point is that you can combine GPSS with 
    discontinuous processes, events and even agents within the same model. Moreover, you can use GPSS
    in parallel and distributed simulation models. 
    .
    Finally, you can use the following prepared example [3].
    .
    \[1] <http://hackage.haskell.org/package/aivika>
    .
    \[2] <http://hackage.haskell.org/package/aivika-transformers>
    .
    \[3] <https://github.com/dsorokin/aivika-gpss-test>
    .
category:        Simulation
license:         BSD3
license-file:    LICENSE
copyright:       (c) 2017-2018. David Sorokin <david.sorokin@gmail.com>
author:          David Sorokin
maintainer:      David Sorokin <david.sorokin@gmail.com>
homepage:        http://www.aivikasoft.com
cabal-version:   >= 1.10
build-type:      Simple
tested-with:     GHC == 8.0.1

extra-source-files:  examples/Example2A.hs
                     examples/Example2ATrans.hs
                     examples/Example2B.hs
                     examples/Example2BTrans.hs
                     examples/Example2C.hs
                     examples/Example2CTrans.hs
                     examples/Example2D.hs
                     examples/Example2DTrans.hs
                     examples/Example2E.hs
                     examples/Example2ETrans.hs
                     examples/Example7-26.hs
                     examples/Example7-26Distributed.hs
                     examples/Example7-26Trans.hs
                     examples/Example7-28.hs
                     examples/Example7-28Trans.hs
                     examples/Example7-31.hs
                     examples/Example7-31Trans.hs
                     examples/Example7-35.hs
                     examples/Example7-35Trans.hs
                     CHANGELOG.md

library

    exposed-modules: Simulation.Aivika.GPSS
                     Simulation.Aivika.GPSS.Block
                     Simulation.Aivika.GPSS.Block.Advance
                     Simulation.Aivika.GPSS.Block.Assemble
                     Simulation.Aivika.GPSS.Block.Assign
                     Simulation.Aivika.GPSS.Block.Depart
                     Simulation.Aivika.GPSS.Block.Enter
                     Simulation.Aivika.GPSS.Block.Gather
                     Simulation.Aivika.GPSS.Block.Generate
                     Simulation.Aivika.GPSS.Block.Leave
                     Simulation.Aivika.GPSS.Block.Link
                     Simulation.Aivika.GPSS.Block.Loop
                     Simulation.Aivika.GPSS.Block.Match
                     Simulation.Aivika.GPSS.Block.Preempt
                     Simulation.Aivika.GPSS.Block.Priority
                     Simulation.Aivika.GPSS.Block.Queue
                     Simulation.Aivika.GPSS.Block.Release
                     Simulation.Aivika.GPSS.Block.Return
                     Simulation.Aivika.GPSS.Block.Seize
                     Simulation.Aivika.GPSS.Block.Split
                     Simulation.Aivika.GPSS.Block.Terminate
                     Simulation.Aivika.GPSS.Block.Test
                     Simulation.Aivika.GPSS.Block.Transfer
                     Simulation.Aivika.GPSS.Block.Unlink
                     Simulation.Aivika.GPSS.AssemblySet
                     Simulation.Aivika.GPSS.Facility
                     Simulation.Aivika.GPSS.MatchChain
                     Simulation.Aivika.GPSS.Queue
                     Simulation.Aivika.GPSS.Results
                     Simulation.Aivika.GPSS.Results.Locale
                     Simulation.Aivika.GPSS.Results.Transform
                     Simulation.Aivika.GPSS.Storage
                     Simulation.Aivika.GPSS.Transact
                     Simulation.Aivika.GPSS.TransactQueueStrategy
                     Simulation.Aivika.Trans.GPSS
                     Simulation.Aivika.Trans.GPSS.Block
                     Simulation.Aivika.Trans.GPSS.Block.Advance
                     Simulation.Aivika.Trans.GPSS.Block.Assemble
                     Simulation.Aivika.Trans.GPSS.Block.Assign
                     Simulation.Aivika.Trans.GPSS.Block.Depart
                     Simulation.Aivika.Trans.GPSS.Block.Enter
                     Simulation.Aivika.Trans.GPSS.Block.Gather
                     Simulation.Aivika.Trans.GPSS.Block.Generate
                     Simulation.Aivika.Trans.GPSS.Block.Leave
                     Simulation.Aivika.Trans.GPSS.Block.Link
                     Simulation.Aivika.Trans.GPSS.Block.Loop
                     Simulation.Aivika.Trans.GPSS.Block.Match
                     Simulation.Aivika.Trans.GPSS.Block.Preempt
                     Simulation.Aivika.Trans.GPSS.Block.Priority
                     Simulation.Aivika.Trans.GPSS.Block.Queue
                     Simulation.Aivika.Trans.GPSS.Block.Release
                     Simulation.Aivika.Trans.GPSS.Block.Return
                     Simulation.Aivika.Trans.GPSS.Block.Seize
                     Simulation.Aivika.Trans.GPSS.Block.Split
                     Simulation.Aivika.Trans.GPSS.Block.Terminate
                     Simulation.Aivika.Trans.GPSS.Block.Test
                     Simulation.Aivika.Trans.GPSS.Block.Transfer
                     Simulation.Aivika.Trans.GPSS.Block.Unlink
                     Simulation.Aivika.Trans.GPSS.AssemblySet
                     Simulation.Aivika.Trans.GPSS.Facility
                     Simulation.Aivika.Trans.GPSS.MatchChain
                     Simulation.Aivika.Trans.GPSS.Queue
                     Simulation.Aivika.Trans.GPSS.Results
                     Simulation.Aivika.Trans.GPSS.Results.Locale
                     Simulation.Aivika.Trans.GPSS.Results.Transform
                     Simulation.Aivika.Trans.GPSS.Storage
                     Simulation.Aivika.Trans.GPSS.Transact
                     Simulation.Aivika.Trans.GPSS.TransactQueueStrategy
                     
    build-depends:   base >= 4.2 && < 6,
                     mtl >= 1.1.0.2,
                     containers >= 0.4.0.0,
                     hashable >= 1.2.0.0,
                     unordered-containers >= 0.1.0.0,
                     aivika >= 6.0.0,
                     aivika-transformers >= 6.0.0

    other-extensions:   MultiParamTypeClasses,
                        TypeFamilies,
                        FlexibleInstances,
                        FlexibleContexts,
                        KindSignatures
                     
    ghc-options:     -O2
    
    default-language:   Haskell2010

source-repository head

    type:     git
    location: https://github.com/dsorokin/aivika-gpss