-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Create random trees
--   
--   Create random trees
@package random-tree
@version 0.6.0.5


-- | Collects all types used in the program
module Math.RandomTree.Types
data TreeState a
TreeState :: Int -> TreeState a
[size] :: TreeState a -> Int
data TreeConfig
TreeConfig :: Int -> Int -> Int -> Int -> TreeConfig
[maxSize] :: TreeConfig -> Int
[minSize] :: TreeConfig -> Int
[minChildren] :: TreeConfig -> Int
[maxChildren] :: TreeConfig -> Int
newtype ReaderStateRandom a
ReaderStateRandom :: ReaderT TreeConfig (StateT (TreeState Int) (MaybeT (Rand StdGen))) a -> ReaderStateRandom a
[runReaderStateRandom] :: ReaderStateRandom a -> ReaderT TreeConfig (StateT (TreeState Int) (MaybeT (Rand StdGen))) a
instance Control.Monad.Reader.Class.MonadReader Math.RandomTree.Types.TreeConfig Math.RandomTree.Types.ReaderStateRandom
instance Control.Monad.State.Class.MonadState (Math.RandomTree.Types.TreeState GHC.Types.Int) Math.RandomTree.Types.ReaderStateRandom
instance Control.Monad.Random.Class.MonadRandom Math.RandomTree.Types.ReaderStateRandom
instance GHC.Base.MonadPlus Math.RandomTree.Types.ReaderStateRandom
instance GHC.Base.Monad Math.RandomTree.Types.ReaderStateRandom
instance GHC.Base.Applicative Math.RandomTree.Types.ReaderStateRandom
instance GHC.Base.Functor Math.RandomTree.Types.ReaderStateRandom
instance GHC.Base.Alternative Math.RandomTree.Types.ReaderStateRandom


-- | Collects all functions pertaining to the labeling of a tree
module Math.RandomTree.Label

-- | Modify the label of a tree
modifyLabel :: (Eq a) => a -> a -> a -> a

-- | Get the neighbors of a label in a fast, theoretically efficient way
getNeighbors :: (Ord a) => Int -> a -> Tree (SuperNode a) -> [a]

-- | Assign clumps to the label list. Takes an old label and reassigns it
--   to the new label in the labelmap, but looks at all neighbors defined
--   by the distanceMap and the neighborDistance. If the reassigned nodes
--   have already been reassigned (in the propertyList), then ignore.
clumpIt :: (Ord a, Eq b) => Int -> Tree (SuperNode a) -> a -> b -> MaybePropertyMap a b -> MaybePropertyMap a b

-- | Assign random labels to the leaves of a tree in a clumped fashion
assignRandomClumpedProperties :: (Ord a, Eq b) => [b] -> Int -> Tree (SuperNode a) -> StdGen -> MaybePropertyMap a b -> MaybePropertyMap a b

-- | Assign random labels to the leaves of a tree
assignRandomProperties :: (Ord a) => [b] -> StdGen -> MaybePropertyMap a b -> MaybePropertyMap a b

-- | Return the empty propertyMap
emptyPropertyMap :: (Ord a) => [a] -> MaybePropertyMap a b

-- | Return the propertyMap
getPropertyMap :: (Ord a) => [a] -> PropertyMap a a


-- | Collects all functions pertaining to the creation of a random tree
module Math.RandomTree.Algorithms

-- | Run the monad transformer for the generation of a random tree. The
--   minChildren value, if chosen, results in a leaf
runTree :: ReaderStateRandom a -> Int -> Int -> Int -> Int -> StdGen -> Maybe a

-- | The recursion for each step of the tree
treeRecursion :: ReaderStateRandom (Tree Int)

-- | The check for the lower bound: if not fulfilled, returns Nothing
checkLowerBound :: ReaderStateRandom (Tree Int)

-- | Recursion which continues to make trees until the bounds are met
getTree :: ReaderStateRandom (Tree Int)

-- | Return String trees
makeTree :: [String] -> Int -> Int -> Int -> Int -> Int -> Bool -> IO (PropertySuperTree String String)
