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
(<http://projects.haskell.org/diagrams>), 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')
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.