Copyright Tony Morris 2008

This software is released under an open source BSD licence.

fj.data
Class Tree<A>

java.lang.Object
  extended by fj.data.Tree<A>
All Implemented Interfaces:
Iterable<A>

public final class Tree<A>
extends Object
implements Iterable<A>

Provides an immutable, non-empty, multi-way tree (a rose tree).

Version:
2.19

Method Summary
<B> Tree<B>
cobind(F<Tree<A>,B> f)
          Applies the given function to all subtrees of this tree, returning a tree of the results (comonad pattern).
 Tree<Tree<A>> cojoin()
          Expands this tree into a tree of trees, with this tree as the root label, and subtrees as the labels of child nodes (comonad pattern).
static
<A> F<Tree<A>,List<A>>
flatten_()
          Puts the elements of the tree into a List, in pre-order.
 List<A> flatten()
          Puts the elements of the tree into a List, in pre-order.
static
<A,B> F<F<A,B>,F<Tree<A>,Tree<B>>>
fmap_()
          Provides a transformation to lift any function so that it maps over Trees.
<B> Tree<B>
fmap(F<A,B> f)
          Maps the given function over this tree.
static
<A,B> F<Tree<A>,B>
foldMap_(F<A,B> f, Monoid<B> m)
          Provides a function that folds a tree with the given monoid.
<B> B
foldMap(F<A,B> f, Monoid<B> m)
          Folds this tree using the given monoid.
 Iterator<A> iterator()
          Returns an iterator for this tree.
static
<A> Tree<A>
leaf(A root)
          Creates a nullary tree.
 List<List<A>> levels()
          Provides a list of the elements of the tree at each level, in level order.
static
<A> Tree<A>
node(A root, List<Tree<A>> forest)
          Creates a new n-ary tree given a root and a subforest of length n.
static
<A> F<Tree<A>,A>
root_()
          Provides a transformation from a tree to its root.
 A root()
          Returns the root element of the tree.
static
<A> F<Tree<A>,List<Tree<A>>>
subForest_()
          Provides a transformation from a tree to its subforest.
 List<Tree<A>> subForest()
          Returns a list of the tree's subtrees.
 Collection<A> toCollection()
          Projects an immutable collection of this tree.
static
<A,B> F<B,Tree<A>>
unfoldTree(F<B,P2<A,List<B>>> f)
          Builds a tree from a seed value.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

iterator

public Iterator<A> iterator()
Returns an iterator for this tree. This method exists to permit the use in a for-each loop.

Specified by:
iterator in interface Iterable<A>
Returns:
A iterator for this tree.

leaf

public static <A> Tree<A> leaf(A root)
Creates a nullary tree.

Parameters:
root - The root element of the tree.
Returns:
A nullary tree with the root element in it.

node

public static <A> Tree<A> node(A root,
                               List<Tree<A>> forest)
Creates a new n-ary tree given a root and a subforest of length n.

Parameters:
root - The root element of the tree.
forest - A list of the tree's subtrees.
Returns:
A newly sprouted tree.

root

public A root()
Returns the root element of the tree.

Returns:
The root element of the tree.

subForest

public List<Tree<A>> subForest()
Returns a list of the tree's subtrees.

Returns:
A list of the tree's subtrees.

root_

public static <A> F<Tree<A>,A> root_()
Provides a transformation from a tree to its root.

Returns:
A transformation from a tree to its root.

subForest_

public static <A> F<Tree<A>,List<Tree<A>>> subForest_()
Provides a transformation from a tree to its subforest.

Returns:
A transformation from a tree to its subforest.

flatten

public List<A> flatten()
Puts the elements of the tree into a List, in pre-order.

Returns:
The elements of the tree in pre-order.

flatten_

public static <A> F<Tree<A>,List<A>> flatten_()
Puts the elements of the tree into a List, in pre-order.

Returns:
The elements of the tree in pre-order.

levels

public List<List<A>> levels()
Provides a list of the elements of the tree at each level, in level order.

Returns:
The elements of the tree at each level.

fmap

public <B> Tree<B> fmap(F<A,B> f)
Maps the given function over this tree.

Parameters:
f - The function to map over this tree.
Returns:
The new Tree after the function has been applied to each element in this Tree.

fmap_

public static <A,B> F<F<A,B>,F<Tree<A>,Tree<B>>> fmap_()
Provides a transformation to lift any function so that it maps over Trees.

Returns:
A transformation to lift any function so that it maps over Trees.

foldMap

public <B> B foldMap(F<A,B> f,
                     Monoid<B> m)
Folds this tree using the given monoid.

Parameters:
f - A transformation from this tree's elements, to the monoid.
m - The monoid to fold this tree with.
Returns:
The result of folding the tree with the given monoid.

toCollection

public Collection<A> toCollection()
Projects an immutable collection of this tree.

Returns:
An immutable collection of this tree.

foldMap_

public static <A,B> F<Tree<A>,B> foldMap_(F<A,B> f,
                                          Monoid<B> m)
Provides a function that folds a tree with the given monoid.

Parameters:
f - A transformation from a tree's elements to the monoid.
m - A monoid to fold the tree with.
Returns:
A function that, given a tree, folds it with the given monoid.

unfoldTree

public static <A,B> F<B,Tree<A>> unfoldTree(F<B,P2<A,List<B>>> f)
Builds a tree from a seed value.

Parameters:
f - A function with which to build the tree.
Returns:
A function which, given a seed value, yields a tree.

cobind

public <B> Tree<B> cobind(F<Tree<A>,B> f)
Applies the given function to all subtrees of this tree, returning a tree of the results (comonad pattern).

Parameters:
f - A function to bind across all the subtrees of this tree.
Returns:
A new tree, with the results of applying the given function to each subtree of this tree. The result of applying the function to the entire tree is the root label, and the results of applying to the root's children are labels of the root's subforest, etc.

cojoin

public Tree<Tree<A>> cojoin()
Expands this tree into a tree of trees, with this tree as the root label, and subtrees as the labels of child nodes (comonad pattern).

Returns:
A tree of trees, with this tree as its root label, and subtrees of this tree as the labels of its child nodes.

Copyright Tony Morris 2008

This software is released under an open source BSD licence.