module Data.Tree.Generators where import Data.Tree import Test.QuickCheck import Control.Monad tree :: (Int -> Int) -- ^ This function is applied to the size parameter. It determines -- the length of the list in child forests, to prevent this function -- from generating trees that are infinitely large. Here, supply a -- function that reduces the size parameter by some amount; using -- @(\`div\` 2)@ is typical, though if you want to restrict the size -- of trees produced even more you might try something like -- @(\`div\` 5)@. -> Gen a -- ^ Generates a root label. -> Gen (Tree a) tree f g = liftM2 Node g (sized $ \s -> resize (f s) (listOf (tree f g)))