Data.Tree.Class

hxt-9.3.1.22: A collection of tools for processing XML with Haskell.

Copyright | Copyright (C) 2005 Uwe Schmidt
License | MIT
Maintainer | Uwe Schmidt (uwe\@fh-wedel.de)
Stability | experimental
Portability | portable
Safe Haskell | Safe-Inferred
Language | Haskell2010

Data.Tree.Class

Description

Interface definition for trees

Synopsis

- class Tree (t :: Type -> Type) where
  - mkTree :: a -> [t a] -> t a
  - mkLeaf :: a -> t a
  - isLeaf :: t a -> Bool
  - isInner :: t a -> Bool
  - getNode :: t a -> a
  - getChildren :: t a -> [t a]
  - changeNode :: (a -> a) -> t a -> t a
  - changeChildren :: ([t a] -> [t a]) -> t a -> t a
  - setNode :: a -> t a -> t a
  - setChildren :: [t a] -> t a -> t a
  - foldTree :: (a -> [b] -> b) -> t a -> b
  - nodesTree :: t a -> [a]
  - depthTree :: t a -> Int
  - cardTree :: t a -> Int
  - formatTree :: (a -> String) -> t a -> String
- formatNTree' :: Tree t => (a -> String) -> (String -> String) -> (String -> String) -> t a -> String -> String

# Documentation

class Tree (t :: Type -> Type) where #

The interface for trees

Minimal complete definition

mkTree, getNode, getChildren, changeNode, changeChildren, foldTree

Methods

mkTree :: a -> [t a] -> t a #

tree construction: a new tree is constructed by a node attribute and a list of children

mkLeaf :: a -> t a #

leaf construction: leafs don't have any children

definition: `mkLeaf n = mkTree n []`

isLeaf :: t a -> Bool #

leaf test: list of children empty?

isInner :: t a -> Bool #

innner node test: `not . isLeaf`

getNode :: t a -> a #

select node attribute

getChildren :: t a -> [t a] #

select children

changeNode :: (a -> a) -> t a -> t a #

edit node attribute

changeChildren :: ([t a] -> [t a]) -> t a -> t a #

edit children

setNode :: a -> t a -> t a #

substitute node: `setNode n = changeNode (const n)`

setChildren :: [t a] -> t a -> t a #

substitute children: `setChildren cl = changeChildren (const cl)`

foldTree :: (a -> [b] -> b) -> t a -> b #

fold for trees

nodesTree :: t a -> [a] #

all nodes of a tree

depthTree :: t a -> Int #

depth of a tree

cardTree :: t a -> Int #

number of nodes in a tree

formatTree :: (a -> String) -> t a -> String #

format tree for readable trace output

a graphical representation of the tree in text format

#### Instances

Instances details

Tree NTree # | Implementation of Data.Tree.Class interface for rose trees
Instance details Defined in Data.Tree.NTree.TypeDefs Methods mkTree :: a -> [NTree a] -> NTree a # mkLeaf :: a -> NTree a # isLeaf :: NTree a -> Bool # isInner :: NTree a -> Bool # getNode :: NTree a -> a # getChildren :: NTree a -> [NTree a] # changeNode :: (a -> a) -> NTree a -> NTree a # changeChildren :: ([NTree a] -> [NTree a]) -> NTree a -> NTree a # setNode :: a -> NTree a -> NTree a # setChildren :: [NTree a] -> NTree a -> NTree a # foldTree :: (a -> [b] -> b) -> NTree a -> b # nodesTree :: NTree a -> [a] # depthTree :: NTree a -> Int # cardTree :: NTree a -> Int # formatTree :: (a -> String) -> NTree a -> String #
Tree NTZipper # |
Instance details Defined in Data.Tree.NTree.Zipper.TypeDefs Methods mkTree :: a -> [NTZipper a] -> NTZipper a # mkLeaf :: a -> NTZipper a # isLeaf :: NTZipper a -> Bool # isInner :: NTZipper a -> Bool # getNode :: NTZipper a -> a # getChildren :: NTZipper a -> [NTZipper a] # changeNode :: (a -> a) -> NTZipper a -> NTZipper a # changeChildren :: ([NTZipper a] -> [NTZipper a]) -> NTZipper a -> NTZipper a # setNode :: a -> NTZipper a -> NTZipper a # setChildren :: [NTZipper a] -> NTZipper a -> NTZipper a # foldTree :: (a -> [b] -> b) -> NTZipper a -> b # nodesTree :: NTZipper a -> [a] # depthTree :: NTZipper a -> Int # cardTree :: NTZipper a -> Int # formatTree :: (a -> String) -> NTZipper a -> String #

formatNTree' :: Tree t => (a -> String) -> (String -> String) -> (String -> String) -> t a -> String -> String #

convert a tree into a pseudo graphical string representation