A library for easily manipulating trees of operators. Operators that extend TreeNode are
granted the following interface:
transform - accepts a partial function that is used to generate a new tree. When the
partial function can be applied to a given tree segment, that segment is replaced with the
result. After attempting to apply the partial function to a given node, the transform
function recursively attempts to apply the function to that node's children.
A TreeNode that has two children, left and right.
A TreeNode with no children.
A TreeNode companion for reference equality for Hash based Collection.
A TreeNode with a single child.