ddc-core-flow-0.3.2.1: DDC/Core/Flow/Process/Process.hs
module DDC.Core.Flow.Process.Process
(Process (..))
where
import DDC.Core.Flow.Process.Operator
import DDC.Core.Flow.Context
import DDC.Core.Flow.Prim
import DDC.Core.Flow.Exp
-- | A process applies some series operators and produces some non-series
-- result.
--
-- We get one of these for each top-level series function in the
-- original program.
data Process
= Process
{ -- | Name of whole process.
-- This is taken from the function name in the original
-- source code.
processName :: Name
-- | Type parameters to process.
-- These are the type parameters of the original function.
, processParamTypes :: [BindF]
-- | Value parameters to process.
-- These are the value parameters of the original function.
, processParamValues :: [BindF]
-- | Flow contexts in this process.
-- This contains a ContextRate entry for all the Rate variables
-- in the parameters, along with an entry for all the nested
-- contexts introduced by the process itself.
, processContexts :: [Context]
-- | Flow operators in this process.
, processOperators :: [Operator]
-- | Top-level statements that don't invoke stream operators.
-- These are typically statements that combine reduction results,
-- like the addition in (fold (+) 0 s1 + fold (*) 1 s1).
--
-- INVARIANT:
-- The worker functions for stream operators do not mention
-- any of the bound variables.
, processStmts :: [LetsF]
-- Type of process result
, processResultType :: TypeF
-- Final result of process.
, processResult :: ExpF
}