-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A simple multi-way tree data structure. -- -- In some contexts, forests (collections of zero or more trees) are more -- important than trees. The data-forest library provides a -- Tree type much like the one from the popular -- containers library, but it also provides a Forest type -- with its own Functor and Foldable instances. @package data-forest @version 0.1.0.9 -- | Multi-way trees (also known as rose trees) and forests, similar -- to Data.Tree from the popular containers library. module Data.Forest -- | A forest is defined completely by its trees. -- -- To construct a forest, use forest or leaves. data Forest a -- | A tree is defined completely by its root and its -- subforest. -- -- To construct a tree, use tree or leaf. data Tree a -- | Construct a forest from a list of trees. -- -- forest [] is equivalent to mempty. forest :: [Tree a] -> Forest a -- | Construct a tree with a root and subforest. tree :: a -> Forest a -> Tree a -- | Construct a tree with a single root and no subforest. -- -- leaf x is equivalent to tree x -- mempty. leaf :: a -> Tree a -- | Construct a forest of depth 1, where each tree contains only a root. -- -- leaves is equivalent to forest . fmap -- leaf leaves :: [a] -> Forest a -- | The trees that constitute the forest. trees :: Forest a -> [Tree a] -- | The value at the root node of the tree. root :: Tree a -> a -- | The forest containing all descendants of the tree's root. subforest :: Tree a -> Forest a -- | The tree's immediate subtrees. -- -- subtrees is equivalent to trees . -- subforest. subtrees :: Tree a -> [Tree a] -- | Catamorphism on forests. -- --
--   >>> 
--   :{
--   example :: Forest Char
--   example = forest
--       [ tree 'a' $ leaves "bc"
--       , tree 'd' $ forest
--           [ leaf 'e'
--           , tree 'f' $ leaves "g"
--           ]
--      ]
--   :}
--   
-- --
--   >>> foldForest (intercalate ", " . fmap (\(a, b) -> [a] <> " [" <> b <> "]")) example
--   "a [b [], c []], d [e [], f [g []]]"
--   
foldForest :: ([(a, b)] -> b) -> Forest a -> b -- | Catamorphism on trees. -- --
--   >>> 
--   :{
--   example :: Tree Char
--   example = tree 'a' $ forest
--       [ tree 'b' $ leaves "cd"
--       , tree 'e' $ forest
--           [ leaf 'f'
--           , tree 'g' $ leaves "h"
--           ]
--      ]
--   :}
--   
-- --
--   >>> foldTree (\a bs -> [a] <> " [" <> intercalate ", " bs <> "]") example
--   "a [b [c [], d []], e [f [], g [h []]]]"
--   
foldTree :: (a -> [b] -> b) -> Tree a -> b instance GHC.Base.Monoid (Data.Forest.Forest a) instance GHC.Base.Semigroup (Data.Forest.Forest a) instance Data.Traversable.Traversable Data.Forest.Forest instance Data.Foldable.Foldable Data.Forest.Forest instance GHC.Base.Functor Data.Forest.Forest instance GHC.Show.Show a => GHC.Show.Show (Data.Forest.Forest a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Forest.Forest a) instance Data.Traversable.Traversable Data.Forest.Tree instance Data.Foldable.Foldable Data.Forest.Tree instance GHC.Base.Functor Data.Forest.Tree instance GHC.Show.Show a => GHC.Show.Show (Data.Forest.Tree a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Forest.Tree a)