001 package fj.data.fingertrees; 002 003 import fj.data.vector.V2; 004 import fj.F; 005 import fj.P2; 006 007 /** 008 * A two-element inner tree node. 009 */ 010 public final class Node2<V, A> extends Node<V, A> { 011 private final V2<A> as; 012 013 Node2(final Measured<V, A> m, final V2<A> as) { 014 super(m, m.sum(m.measure(as._1()), m.measure(as._2()))); 015 this.as = as; 016 } 017 018 @Override public <B> B foldRight(final F<A, F<B, B>> aff, final B z) { 019 return aff.f(as._1()).f(aff.f(as._2()).f(z)); 020 } 021 022 @Override public <B> B foldLeft(final F<B, F<A, B>> bff, final B z) { 023 return bff.f(bff.f(z).f(as._1())).f(as._2()); 024 } 025 026 public Digit<V, A> toDigit() { 027 return new Two<V, A>(measured(), as); 028 } 029 030 @Override public P2<Integer, A> lookup(final F<V, Integer> o, final int i) { 031 return null; // TODO 032 } 033 034 public <B> B match(final F<Node2<V, A>, B> n2, final F<Node3<V, A>, B> n3) { 035 return n2.f(this); 036 } 037 038 public V2<A> toVector() { 039 return as; 040 } 041 }