Rose trees with cached and accumulating monoidal annotations.
Rose (n-ary) trees with both upwards- (i.e. cached) and downwards-traveling (i.e. accumulating) monoidal annotations. This is used as the core data structure underlying the diagrams
framework (https://diagrams.github.io), but potentially has other applications as well.
Abstractly, a DUALTree is a rose (n-ary) tree with data (of type l
) at leaves, data (of type a
) at internal nodes, and two types of monoidal annotations, one (of type u
) travelling "up" the tree and one (of type d
) traveling "down".
See Data.Tree.DUAL
for full documentation. Data.Tree.DUAL
provides a public API which should suffice for most purposes. Data.Tree.DUAL.Internal
exports more of the internal implementation---use it at your own risk.