The tree-traversals package defines [in-order, pre-order, post-order, level-order, and reversed level-order traversals](https://en.wikipedia.org/wiki/Tree_traversal#Types) for tree-like types:

```haskell
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.

```haskell
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 `Phases` applicative transformer for organizing effects into distinct phases.

Instances of `TreeLike` are provided for rose trees (`Tree` from [`Data.Tree`](http://hackage.haskell.org/package/containers/docs/Data-Tree.html)), binary trees (`BinaryTree` from this package's `Data.BinaryTree`), forests (`Forest` from this package's `Data.Traversable.TreeLike`),
and algebraic combinations of trees (`Compose outerTree innerTree`, `Product fstTree sndTree`, `Sum leftTree rightTree`).