aivika-gpss-0.4: GPSS-like DSL for Aivika

CopyrightCopyright (c) 2017 David Sorokin <david.sorokin@gmail.com>
LicenseBSD3
MaintainerDavid Sorokin <david.sorokin@gmail.com>
Stabilityexperimental
Safe HaskellNone
LanguageHaskell98

Simulation.Aivika.Trans.GPSS.Block.Split

Description

Tested with: GHC 8.0.2

This module defines an analog of the GPSS block SPLIT.

Synopsis

Documentation

splitBlock Source #

Arguments

:: MonadDES m 
=> [Block m (Transact m a) ()]

split and transfer new transacts to the specified blocks

-> Block m (Transact m a) (Transact m a) 

This is an analog of the GPSS construct

SPLIT A,B,C

Parameter A is a length of the list parameter passed in to the function. Parameter B is the list itself. If you need to define parameter C then you can create the blocks dynamically that could depend on the index and where we could assign a new value for each new transcact after splitting.

An example is

let blocks :: [Block DIO (Transact DIO (a, Int)) ()]
    blocks = ...
    f :: (Int, Block DIO (Transact DIO (a, Int)) ()) -> Block DIO (Transact DIO a) ()
    f (n, block) = assignBlock (a -> (a, n)) >>> block
    blocks' :: [Block DIO (Transact DIO a) ()]
    blocks' = map f $ zip [0..] blocks
in splitBlock blocks'