Annotations for syntax trees
- data Ann info expr a where
- Ann :: {
- annInfo :: info (EvalResult a)
- annExpr :: expr a
- Ann :: {
- type AnnSTF info dom a = ASTF (Ann info dom) a
- injectAnn :: (sub :<: sup, ConsType a) => info (EvalResult a) -> sub a -> AST (Ann info sup) a
- projectAnn :: sub :<: sup => AST (Ann info sup) a -> Maybe (info (EvalResult a), sub a)
- getInfo :: AST (Ann info dom) a -> info (EvalResult a)
- collectInfo :: (forall a. info a -> b) -> AST (Ann info dom) a -> [b]
- toTreeAnn :: forall info dom a. (Render info, ToTree dom) => ASTF (Ann info dom) a -> Tree String
- showANN :: (Render info, ToTree dom) => ASTF (Ann info dom) a -> String
- drawANN :: (Render info, ToTree dom) => ASTF (Ann info dom) a -> IO ()
Documentation
data Ann info expr a whereSource
Annotating an expression with arbitrary information.
This can be used to annotate every node of a syntax tree, which is done by changing
AST dom a
to
AST (Ann info dom) a
Injection/projection of an annotated tree is done using
injectAnn
/ projectAnn
.
Ann :: info (EvalResult a) -> expr a -> Ann info expr a | |
|
injectAnn :: (sub :<: sup, ConsType a) => info (EvalResult a) -> sub a -> AST (Ann info sup) aSource
projectAnn :: sub :<: sup => AST (Ann info sup) a -> Maybe (info (EvalResult a), sub a)Source
getInfo :: AST (Ann info dom) a -> info (EvalResult a)Source
Get the annotation of the top-level node
collectInfo :: (forall a. info a -> b) -> AST (Ann info dom) a -> [b]Source
Collect the annotations of all nodes
toTreeAnn :: forall info dom a. (Render info, ToTree dom) => ASTF (Ann info dom) a -> Tree StringSource
Rendering of annotated syntax trees