V
- The monoidal type with which to annotate nodes.A
- The type of the tree's elements.public abstract class FingerTree<V,A>
extends java.lang.Object
Seq
for an example.
Based on "Finger trees: a simple general-purpose data structure", by Ralf Hinze and Ross Paterson.Modifier and Type | Method and Description |
---|---|
abstract FingerTree<V,A> |
append(FingerTree<V,A> t)
Appends one finger tree to another.
|
abstract FingerTree<V,A> |
cons(A a)
Adds the given element to this tree as the first element.
|
abstract <B> B |
foldLeft(F<B,F<A,B>> f,
B z)
Folds the tree to the left with the given function and the given initial element.
|
abstract <B> B |
foldRight(F<A,F<B,B>> f,
B z)
Folds the tree to the right with the given function and the given initial element.
|
boolean |
isEmpty()
Indicates whether this tree is empty.
|
abstract P2<java.lang.Integer,A> |
lookup(F<V,java.lang.Integer> o,
int i) |
abstract <B> FingerTree<V,B> |
map(F<A,B> f,
Measured<V,B> m)
Maps the given function across this tree, measuring with the given Measured instance.
|
abstract <B> B |
match(F<Empty<V,A>,B> empty,
F<Single<V,A>,B> single,
F<Deep<V,A>,B> deep)
Provides pattern matching on trees.
|
abstract V |
measure()
Returns the sum of this tree's annotations.
|
static <V,A> Measured<V,A> |
measured(Monoid<V> monoid,
F<A,V> measure)
Constructs a Measured instance for the element type, given a monoid and a measuring function.
|
static <V,A> MakeTree<V,A> |
mkTree(Measured<V,A> m)
Returns a builder of trees and tree components that annotates them using the given Measured instance.
|
abstract A |
reduceLeft(F<A,F<A,A>> f)
Folds the tree to the left with the given function.
|
abstract A |
reduceRight(F<A,F<A,A>> f)
Folds the tree to the right with the given function.
|
abstract FingerTree<V,A> |
snoc(A a)
Adds the given element to this tree as the last element.
|
public abstract <B> B foldRight(F<A,F<B,B>> f, B z)
f
- A function with which to fold the tree.z
- An initial element to apply to the fold.public abstract A reduceRight(F<A,F<A,A>> f)
f
- A function with which to fold the tree.public abstract <B> B foldLeft(F<B,F<A,B>> f, B z)
f
- A function with which to fold the tree.z
- An initial element to apply to the fold.public abstract A reduceLeft(F<A,F<A,A>> f)
f
- A function with which to fold the tree.public abstract <B> FingerTree<V,B> map(F<A,B> f, Measured<V,B> m)
f
- A function to map across the values of this tree.m
- A measuring with which to annotate the tree.public abstract V measure()
public final boolean isEmpty()
public abstract <B> B match(F<Empty<V,A>,B> empty, F<Single<V,A>,B> single, F<Deep<V,A>,B> deep)
empty
- The function to apply to this empty tree.single
- A function to apply if this tree contains a single element.deep
- A function to apply if this tree contains more than one element.public static <V,A> Measured<V,A> measured(Monoid<V> monoid, F<A,V> measure)
monoid
- A monoid for the measures.measure
- A function with which to measure element values.public static <V,A> MakeTree<V,A> mkTree(Measured<V,A> m)
m
- A Measured instance with which to annotate trees, digits, and nodes.public abstract FingerTree<V,A> cons(A a)
a
- The element to add to the front of this tree.public abstract FingerTree<V,A> snoc(A a)
a
- The element to add to the end of this tree.public abstract FingerTree<V,A> append(FingerTree<V,A> t)
t
- A finger tree to append to this one.