ddc-core-flow-0.3.2.1: DDC/Core/Flow/Process/Operator.hs
module DDC.Core.Flow.Process.Operator
(Operator (..))
where
import DDC.Core.Flow.Exp
-- | An abstract series operator.
--
-- Each of the constructors holds all the information we need to produce
-- code for that operator.
data Operator
-----------------------------------------
-- | Connect a series from one place to another.
-- These don't come from the source program, but are useful for
-- during code generation.
= OpId
{ -- Binder for result series.
opResultSeries :: BindF
-- Rate of the input series.
, opInputRate :: TypeF
-- Bound of the input series
, opInputSeries :: BoundF
-- Type of the elements.
, opElemType :: TypeF
}
-----------------------------------------
-- | Convert a series to a manifest vector.
| OpCreate
{ -- | Binder for result vector
opResultVector :: BindF
-- | Rate of input series
, opInputRate :: TypeF
-- | Bound of input series.
, opInputSeries :: BoundF
-- | Rate that should be used when allocating the vector.
-- This is filled in by `patchAllocRates`.
, opAllocRate :: Maybe TypeF
-- | Type of the elements.
, opElemType :: TypeF
}
-----------------------------------------
-- | Apply a function to corresponding elements in several input series
-- of the same rate, producing a new series. This subsumes the regular
-- 'map' operator as well as 'zipWith' like operators where the input
-- lengths are identical.
| OpMap
{ -- | Arity of map, number of input streams.
opArity :: Int
-- | Binder for result series.
, opResultSeries :: BindF
-- | Rate of all input series.
, opInputRate :: TypeF
-- | Names for input series.
, opInputSeriess :: [BoundF]
-- | Worker input parameters
, opWorkerParams :: [BindF]
-- | Worker body
, opWorkerBody :: ExpF
}
-----------------------------------------
-- | Fold all the elements of a series.
| OpFold
{ -- | Binder for result value.
opResultValue :: BindF
-- | Rate of input series.
, opInputRate :: TypeF
-- | Bound of input series.
, opInputSeries :: BoundF
-- | Starting accumulator value.
, opZero :: ExpF
-- | Worker parameter for index input.
-- Should be BNone for OpFlowFold, but something for OpFlowFoldIndex
, opWorkerParamIndex :: BindF
-- | Worker parameter for accumulator input.
, opWorkerParamAcc :: BindF
-- | Worker parameter for element input.
, opWorkerParamElem :: BindF
-- | Worker body.
, opWorkerBody :: ExpF }
-----------------------------------------
-- | Pack a series according to a selector.
| OpPack
{ -- | Binder for result series.
opResultSeries :: BindF
-- | Rate of input series.
, opInputRate :: TypeF
-- | Bound of input series.
, opInputSeries :: BoundF
-- | Rate of output series.
, opOutputRate :: TypeF
-- | Type of a series element.
, opElemType :: TypeF }
deriving Show