data Tree a
A rose tree which represents a random generated outcome, and all the ways in which it can be made smaller.
This tree is exactly the same as 'Data.Tree' in every way except that Applicative '<*>' and Monad '>>=' walk the tree in the reverse order. This modification is critical for shrinking to reach a minimal counterexample.
expandTree :: forall a. (a -> List a) -> Tree a -> Tree a
Apply an additional unfolding function to an existing tree.
The root outcome remains intact, only the shrinks are affected, this applies recursively, so shrinks can only ever be added using this function.
If you want to replace the shrinks altogether, try:
unfoldTree f (outcome oldTree)