Safe Haskell | None |
---|---|
Language | Haskell2010 |
Generic traversals of AST
terms
Synopsis
- gmapQ :: forall dom b. (forall a. ASTF dom a -> b) -> forall a. ASTF dom a -> [b]
- gmapT :: forall dom. (forall a. ASTF dom a -> ASTF dom a) -> forall a. ASTF dom a -> ASTF dom a
- everywhereUp :: (forall a. ASTF dom a -> ASTF dom a) -> forall a. ASTF dom a -> ASTF dom a
- everywhereDown :: (forall a. ASTF dom a -> ASTF dom a) -> forall a. ASTF dom a -> ASTF dom a
- data Args c sig where
- listArgs :: (forall a. c (Full a) -> b) -> Args c sig -> [b]
- mapArgs :: (forall a. c1 (Full a) -> c2 (Full a)) -> forall sig. Args c1 sig -> Args c2 sig
- mapArgsA :: Applicative f => (forall a. c1 (Full a) -> f (c2 (Full a))) -> forall sig. Args c1 sig -> f (Args c2 sig)
- mapArgsM :: Monad m => (forall a. c1 (Full a) -> m (c2 (Full a))) -> forall sig. Args c1 sig -> m (Args c2 sig)
- appArgs :: AST dom sig -> Args (AST dom) sig -> ASTF dom (DenResult sig)
- foldrArgs :: (forall a. c (Full a) -> b -> b) -> b -> forall sig. Args c sig -> b
- listFold :: forall dom b. (forall sig. dom sig -> [b] -> b) -> forall a. ASTF dom a -> b
- match :: forall dom a c. (forall sig. a ~ DenResult sig => dom sig -> Args (AST dom) sig -> c (Full a)) -> ASTF dom a -> c (Full a)
- query :: forall dom a c. (forall sig. a ~ DenResult sig => dom sig -> Args (AST dom) sig -> c (Full a)) -> ASTF dom a -> c (Full a)
- simpleMatch :: forall dom a b. (forall sig. a ~ DenResult sig => dom sig -> Args (AST dom) sig -> b) -> ASTF dom a -> b
- fold :: forall dom c. (forall sig. dom sig -> Args c sig -> c (Full (DenResult sig))) -> forall a. ASTF dom a -> c (Full a)
- simpleFold :: forall dom b. (forall sig. dom sig -> Args (Const b) sig -> b) -> forall a. ASTF dom a -> b
- matchTrans :: forall dom dom' c a. (forall sig. a ~ DenResult sig => dom sig -> Args (AST dom) sig -> c (ASTF dom' a)) -> ASTF dom a -> c (ASTF dom' a)
- data WrapFull c a where
- toTree :: forall dom a b. (forall sig. dom sig -> b) -> ASTF dom a -> Tree b
Documentation
gmapQ :: forall dom b. (forall a. ASTF dom a -> b) -> forall a. ASTF dom a -> [b] Source #
Map a function over all immediate sub-terms, collecting the results in a list (corresponds to the function with the same name in Scrap Your Boilerplate)
gmapT :: forall dom. (forall a. ASTF dom a -> ASTF dom a) -> forall a. ASTF dom a -> ASTF dom a Source #
Map a function over all immediate sub-terms (corresponds to the function with the same name in Scrap Your Boilerplate)
everywhereUp :: (forall a. ASTF dom a -> ASTF dom a) -> forall a. ASTF dom a -> ASTF dom a Source #
Apply a transformation bottom-up over an expression (corresponds to
everywhere
in Scrap Your Boilerplate)
everywhereDown :: (forall a. ASTF dom a -> ASTF dom a) -> forall a. ASTF dom a -> ASTF dom a Source #
Apply a transformation top-down over an expression (corresponds to
everywhere'
in Scrap Your Boilerplate)
listArgs :: (forall a. c (Full a) -> b) -> Args c sig -> [b] Source #
Map a function over an Args
list and collect the results in an ordinary
list
mapArgs :: (forall a. c1 (Full a) -> c2 (Full a)) -> forall sig. Args c1 sig -> Args c2 sig Source #
Map a function over an Args
list
mapArgsA :: Applicative f => (forall a. c1 (Full a) -> f (c2 (Full a))) -> forall sig. Args c1 sig -> f (Args c2 sig) Source #
Map an applicative function over an Args
list
mapArgsM :: Monad m => (forall a. c1 (Full a) -> m (c2 (Full a))) -> forall sig. Args c1 sig -> m (Args c2 sig) Source #
Map a monadic function over an Args
list
appArgs :: AST dom sig -> Args (AST dom) sig -> ASTF dom (DenResult sig) Source #
Apply a (partially applied) symbol to a list of argument terms
foldrArgs :: (forall a. c (Full a) -> b -> b) -> b -> forall sig. Args c sig -> b Source #
Right fold for an Args
list
listFold :: forall dom b. (forall sig. dom sig -> [b] -> b) -> forall a. ASTF dom a -> b Source #
Fold an AST
using a list to hold the results of sub-terms
match :: forall dom a c. (forall sig. a ~ DenResult sig => dom sig -> Args (AST dom) sig -> c (Full a)) -> ASTF dom a -> c (Full a) Source #
"Pattern match" on an AST
using a function that gets direct access to
the top-most symbol and its sub-trees
query :: forall dom a c. (forall sig. a ~ DenResult sig => dom sig -> Args (AST dom) sig -> c (Full a)) -> ASTF dom a -> c (Full a) Source #
Deprecated: Please use match
instead.
simpleMatch :: forall dom a b. (forall sig. a ~ DenResult sig => dom sig -> Args (AST dom) sig -> b) -> ASTF dom a -> b Source #
A version of match
with a simpler result type
fold :: forall dom c. (forall sig. dom sig -> Args c sig -> c (Full (DenResult sig))) -> forall a. ASTF dom a -> c (Full a) Source #
simpleFold :: forall dom b. (forall sig. dom sig -> Args (Const b) sig -> b) -> forall a. ASTF dom a -> b Source #
Simplified version of fold
for situations where all intermediate results
have the same type
matchTrans :: forall dom dom' c a. (forall sig. a ~ DenResult sig => dom sig -> Args (AST dom) sig -> c (ASTF dom' a)) -> ASTF dom a -> c (ASTF dom' a) Source #
A version of match
where the result is a transformed syntax tree,
wrapped in a type constructor c
data WrapFull c a where Source #
Can be used to make an arbitrary type constructor indexed by (
.
This is useful as the type constructor parameter of Full
a)Args
. That is, use
Args (WrapFull c) ...
instead of
Args c ...
if c
is not indexed by (
.Full
a)
WrapFull :: {..} -> WrapFull c (Full a) | |
|