Safe Haskell | None |
---|---|
Language | Haskell2010 |
The code generator cannot handle the array combinators (map
and
friends), so this module was written to transform them into the
equivalent do-loops. The transformation is currently rather naive,
and - it's certainly worth considering when we can express such
transformations in-place.
Synopsis
- transformFunDef :: (MonadFreshNames m, Bindable tolore, BinderOps tolore, LetAttr SOACS ~ LetAttr tolore, CanBeAliased (Op tolore)) => FunDef SOACS -> m (FunDef tolore)
- type Transformer m = (MonadBinder m, Bindable (Lore m), BinderOps (Lore m), LocalScope (Lore m) m, LParamAttr SOACS ~ LParamAttr (Lore m), CanBeAliased (Op (Lore m)))
- transformStmRecursively :: (Transformer m, LetAttr (Lore m) ~ LetAttr SOACS) => Stm -> m ()
- transformLambda :: (MonadFreshNames m, Bindable lore, BinderOps lore, LocalScope somelore m, SameScope somelore lore, LetAttr lore ~ LetAttr SOACS, CanBeAliased (Op lore)) => Lambda -> m (Lambda lore)
- transformSOAC :: Transformer m => Pattern (Lore m) -> SOAC (Lore m) -> m ()
- transformBody :: (Transformer m, LetAttr (Lore m) ~ LetAttr SOACS) => Body -> m (Body (Lore m))
Documentation
transformFunDef :: (MonadFreshNames m, Bindable tolore, BinderOps tolore, LetAttr SOACS ~ LetAttr tolore, CanBeAliased (Op tolore)) => FunDef SOACS -> m (FunDef tolore) Source #
type Transformer m = (MonadBinder m, Bindable (Lore m), BinderOps (Lore m), LocalScope (Lore m) m, LParamAttr SOACS ~ LParamAttr (Lore m), CanBeAliased (Op (Lore m))) Source #
The constraints that a monad must uphold in order to be used for first-order transformation.
transformStmRecursively :: (Transformer m, LetAttr (Lore m) ~ LetAttr SOACS) => Stm -> m () Source #
First transform any nested Body
or Lambda
elements, then
apply transformSOAC
if the expression is a SOAC.
transformLambda :: (MonadFreshNames m, Bindable lore, BinderOps lore, LocalScope somelore m, SameScope somelore lore, LetAttr lore ~ LetAttr SOACS, CanBeAliased (Op lore)) => Lambda -> m (Lambda lore) Source #
Recursively first-order-transform a lambda.
transformSOAC :: Transformer m => Pattern (Lore m) -> SOAC (Lore m) -> m () Source #