barecheck-0.2.0.0: lib/Data/Tree/Generators.hs
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)))