module Data.Tree.Shrinkers where

import Data.Tree
import Prelude.Shrinkers
import Test.QuickCheck.Arbitrary (shrinkList)

tree
  :: (a -> [a])
  -> Tree a
  -> [Tree a]
tree f (Node a as) = as ++
  [ Node n cs | (n, cs) <- tuple2 f (shrinkList (tree f)) (a, as) ]