containers-0.5.4.0: Assorted concrete container types

Copyright(c) The University of Glasgow 2002
LicenseBSD-style (see the file libraries/base/LICENSE)
Maintainerlibraries@haskell.org
Stabilityexperimental
Portabilityportable
Safe HaskellSafe
LanguageHaskell98

Data.Tree

Contents

Description

Multi-way trees (aka rose trees) and forests.

Synopsis

Documentation

data Tree aSource

Multi-way trees, also known as rose trees.

Constructors

Node 

Fields

rootLabel :: a

label value

subForest :: Forest a

zero or more child trees

Instances

Monad Tree 
Functor Tree 
Applicative Tree 
Foldable Tree 
Traversable Tree 
Eq a => Eq (Tree a) 
Data a => Data (Tree a) 
Read a => Read (Tree a) 
Show a => Show (Tree a) 
NFData a => NFData (Tree a) 
Typeable (* -> *) Tree 

type Forest a = [Tree a]Source

Two-dimensional drawing

drawTree :: Tree String -> StringSource

Neat 2-dimensional drawing of a tree.

drawForest :: Forest String -> StringSource

Neat 2-dimensional drawing of a forest.

Extraction

flatten :: Tree a -> [a]Source

The elements of a tree in pre-order.

levels :: Tree a -> [[a]]Source

Lists of nodes at each level of the tree.

Building trees

unfoldTree :: (b -> (a, [b])) -> b -> Tree aSource

Build a tree from a seed value

unfoldForest :: (b -> (a, [b])) -> [b] -> Forest aSource

Build a forest from a list of seed values

unfoldTreeM :: Monad m => (b -> m (a, [b])) -> b -> m (Tree a)Source

Monadic tree builder, in depth-first order

unfoldForestM :: Monad m => (b -> m (a, [b])) -> [b] -> m (Forest a)Source

Monadic forest builder, in depth-first order

unfoldTreeM_BF :: Monad m => (b -> m (a, [b])) -> b -> m (Tree a)Source

Monadic tree builder, in breadth-first order, using an algorithm adapted from Breadth-First Numbering: Lessons from a Small Exercise in Algorithm Design, by Chris Okasaki, ICFP'00.

unfoldForestM_BF :: Monad m => (b -> m (a, [b])) -> [b] -> m (Forest a)Source

Monadic forest builder, in breadth-first order, using an algorithm adapted from Breadth-First Numbering: Lessons from a Small Exercise in Algorithm Design, by Chris Okasaki, ICFP'00.