Copyright | Copyright (c) 2017 David Sorokin <david.sorokin@gmail.com> |
---|---|
License | BSD3 |
Maintainer | David Sorokin <david.sorokin@gmail.com> |
Stability | experimental |
Safe Haskell | None |
Language | Haskell98 |
Tested with: GHC 8.0.2
This module defines an analog of the GPSS block SPLIT.
Documentation
:: 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'