The tree-traversals package defines
in-order, pre-order, post-order, level-order, and reversed level-order traversals
for tree-like types:
inorder, preorder, postorder, levelorder, rlevelorder
:: (TreeLike tree, Applicative f) => (a -> f b) -> tree a -> f (tree b)
The package also provides newtype wrappers for the various traversals so they
may be used with traverse
, i.e.
traverse f (InOrder tree) = inorder f tree
traverse f (PreOrder tree) = preorder f tree
traverse f (PostOrder tree) = postorder f tree
traverse f (LevelOrder tree) = levelorder f tree
traverse f (RLevelOrder tree) = rlevelorder f tree
To implement the various orders, the tree-traversals package provides the
Control.Applicative.Phases.Phases
applicative transformer for organizing effects
into distinct phases.
Instances of Data.Traversable.TreeLike.TreeLike
are provided for
rose trees (Data.Tree.Tree
),
binary trees (Data.BinaryTree.BinaryTree
),
forests (Data.Traversable.TreeLike.Forest
),
and algebraic combinations of trees (Data.Functor.Compose.Compose
outerTree innerTree
,
Data.Functor.Product
fstTree sndTree
, Data.Functor.Sum
leftTree rightTree
).