Portability | portable |
---|---|
Stability | experimental |
Maintainer | mik@konecny.aow.cz |
Kahn process networks with channels
adapted for arbitrary precision real higher-order data communication.
Executed using a number of parallel threads.
Each process started in a dedicated thread
and each process typically starts further internal threads.
Each channel is a transactional variable (TVar)
known to both end processes and allows them to communicate
according to its instance of the QAProtocol
class.
- data ERProcess sInAnyProt sOutAnyProt = ERProcess {
- erprocName :: ERProcessName
- erprocDeploy :: ERProcessDeploy sInAnyProt sOutAnyProt
- erprocInputTypes :: [ChannelType]
- erprocOutputTypes :: [ChannelType]
- type ERProcessName = String
- type ERProcessDeploy sInAnyProt sOutAnyProt = ERProcessName -> [sInAnyProt] -> [sOutAnyProt] -> ERProcessExpandCallback sInAnyProt sOutAnyProt -> IO ()
- type ERProcessExpandCallback sInAnyProt sOutAnyProt = String -> [(ChannelType, Int)] -> [(ChannelType, Int)] -> [(ERProcess sInAnyProt sOutAnyProt, ([Int], [Int]))] -> IO ()
- data ERProcessAction s q a
- = ERProcessActionRetryWhen (s -> Bool)
- | ERProcessActionQuery q
- | ERProcessActionAnswer Bool a
- subnetProcess :: ERProcessName -> [(ChannelType, Int)] -> [(ChannelType, Int)] -> [(ERProcess sInAnyProt sOutAnyProt, ([Int], [Int]))] -> ERProcess sInAnyProt sOutAnyProt
Documentation
data ERProcess sInAnyProt sOutAnyProt Source
All data that define a process, including its behaviour. Each executing process is instantiated from one of these descriptions.
ERProcess | |
|
type ERProcessName = StringSource
type ERProcessDeploy sInAnyProt sOutAnyProt = ERProcessName -> [sInAnyProt] -> [sOutAnyProt] -> ERProcessExpandCallback sInAnyProt sOutAnyProt -> IO ()Source
type ERProcessExpandCallback sInAnyProt sOutAnyProt = String -> [(ChannelType, Int)] -> [(ChannelType, Int)] -> [(ERProcess sInAnyProt sOutAnyProt, ([Int], [Int]))] -> IO ()Source
data ERProcessAction s q a Source
Explicit representation of a process' action, able to distinguish between answering and making a query or pausing one internal thread until the internal state (TV) has met some condition.
This is useful for producing highly customisable templates
for processes
as Haskell functions whose parameters are functions that determine
what the process should do as a response to some external or internal events.
See for example Control.ERNet.Blocks.Basic.passThroughStatefulProcess
.
:: ERProcessName | |
-> [(ChannelType, Int)] | input socket channel types and numbers |
-> [(ChannelType, Int)] | output socket channel types and numbers |
-> [(ERProcess sInAnyProt sOutAnyProt, ([Int], [Int]))] | internal processes and their in/out channel numbers |
-> ERProcess sInAnyProt sOutAnyProt |