pub trait TreeT<A: Adapton, Leaf> {
type Lev: Debug + Hash + PartialEq + Eq + Clone;
type Tree: Debug + Hash + PartialEq + Eq + Clone;
fn lev<X: Hash>(&X) -> Self::Lev;
fn lev_of_tree(&mut A, &Self::Tree) -> Self::Lev;
fn lev_bits() -> Self::Lev;
fn lev_zero() -> Self::Lev;
fn lev_inc(&Self::Lev) -> Self::Lev;
fn lev_add(&Self::Lev, &Self::Lev) -> Self::Lev;
fn lev_lte(&Self::Lev, &Self::Lev) -> bool;
fn lev_max_val() -> Self::Lev;
fn nil(&mut A) -> Self::Tree;
fn leaf(&mut A, Leaf) -> Self::Tree;
fn bin(&mut A, Self::Lev, Self::Tree, Self::Tree) -> Self::Tree;
fn name(&mut A, A::Name, Self::Lev, Self::Tree, Self::Tree) -> Self::Tree;
fn art(&mut A, Art<Self::Tree, A::Loc>) -> Self::Tree;
fn rc(&mut A, Rc<Self::Tree>) -> Self::Tree;
fn elim<Res, NilC, LeafC, BinC, NameC>(&mut A, Self::Tree, NilC, LeafC, BinC, NameC) -> Res where NilC: FnOnce(&mut A) -> Res, LeafC: FnOnce(&mut A, Leaf) -> Res, BinC: FnOnce(&mut A, Self::Lev, Self::Tree, Self::Tree) -> Res, NameC: FnOnce(&mut A, A::Name, Self::Lev, Self::Tree, Self::Tree) -> Res;
fn elim_ref<Res, NilC, LeafC, BinC, NameC>(&mut A, &Self::Tree, NilC, LeafC, BinC, NameC) -> Res where NilC: FnOnce(&mut A) -> Res, LeafC: FnOnce(&mut A, &Leaf) -> Res, BinC: FnOnce(&mut A, &Self::Lev, &Self::Tree, &Self::Tree) -> Res, NameC: FnOnce(&mut A, &A::Name, &Self::Lev, &Self::Tree, &Self::Tree) -> Res;
fn elim_move<Arg, Res, NilC, LeafC, BinC, NameC>(&mut A, Self::Tree, Arg, NilC, LeafC, BinC, NameC) -> Res where NilC: FnOnce(&mut A, Arg) -> Res, LeafC: FnOnce(&mut A, Leaf, Arg) -> Res, BinC: FnOnce(&mut A, Self::Lev, Self::Tree, Self::Tree, Arg) -> Res, NameC: FnOnce(&mut A, A::Name, Self::Lev, Self::Tree, Self::Tree, Arg) -> Res;
fn lev_max(a: &Self::Lev, b: &Self::Lev) -> Self::Lev { ... }
fn fold_lr<Res: Hash + Debug + Eq + Clone, LeafC, BinC, NameC>(st: &mut A, tree: Self::Tree, res: Res, leaf: &LeafC, bin: &BinC, name: &NameC) -> Res where LeafC: Fn(&mut A, Leaf, Res) -> Res, BinC: Fn(&mut A, Self::Lev, Res) -> Res, NameC: Fn(&mut A, A::Name, Self::Lev, Res) -> Res { ... }
fn fold_rl<Res: Hash + Debug + Eq + Clone, LeafC, BinC, NameC>(st: &mut A, tree: Self::Tree, res: Res, leaf: &LeafC, bin: &BinC, name: &NameC) -> Res where LeafC: Fn(&mut A, Leaf, Res) -> Res, BinC: Fn(&mut A, Self::Lev, Res) -> Res, NameC: Fn(&mut A, A::Name, Self::Lev, Res) -> Res { ... }
fn fold_up<Res: Hash + Debug + Eq + Clone, NilC, LeafC, BinC, NameC>(st: &mut A, tree: Self::Tree, nil: &NilC, leaf: &LeafC, bin: &BinC, name: &NameC) -> Res where NilC: Fn(&mut A) -> Res, LeafC: Fn(&mut A, Leaf) -> Res, BinC: Fn(&mut A, Self::Lev, Res, Res) -> Res, NameC: Fn(&mut A, A::Name, Self::Lev, Res, Res) -> Res { ... }
}
Associated Types
Required Methods
fn lev<X: Hash>(&X) -> Self::Lev
fn lev_of_tree(&mut A, &Self::Tree) -> Self::Lev
fn lev_bits() -> Self::Lev
fn lev_zero() -> Self::Lev
fn lev_inc(&Self::Lev) -> Self::Lev
fn lev_add(&Self::Lev, &Self::Lev) -> Self::Lev
fn lev_lte(&Self::Lev, &Self::Lev) -> bool
fn nil(&mut A) -> Self::Tree
fn leaf(&mut A, Leaf) -> Self::Tree
fn bin(&mut A, Self::Lev, Self::Tree, Self::Tree) -> Self::Tree
fn name(&mut A, A::Name, Self::Lev, Self::Tree, Self::Tree) -> Self::Tree
fn art(&mut A, Art<Self::Tree, A::Loc>) -> Self::Tree
fn rc(&mut A, Rc<Self::Tree>) -> Self::Tree
fn elim<Res, NilC, LeafC, BinC, NameC>(&mut A, Self::Tree, NilC, LeafC, BinC, NameC) -> Res where NilC: FnOnce(&mut A) -> Res, LeafC: FnOnce(&mut A, Leaf) -> Res, BinC: FnOnce(&mut A, Self::Lev, Self::Tree, Self::Tree) -> Res, NameC: FnOnce(&mut A, A::Name, Self::Lev, Self::Tree, Self::Tree) -> Res
fn elim_ref<Res, NilC, LeafC, BinC, NameC>(&mut A, &Self::Tree, NilC, LeafC, BinC, NameC) -> Res where NilC: FnOnce(&mut A) -> Res, LeafC: FnOnce(&mut A, &Leaf) -> Res, BinC: FnOnce(&mut A, &Self::Lev, &Self::Tree, &Self::Tree) -> Res, NameC: FnOnce(&mut A, &A::Name, &Self::Lev, &Self::Tree, &Self::Tree) -> Res
fn elim_move<Arg, Res, NilC, LeafC, BinC, NameC>(&mut A, Self::Tree, Arg, NilC, LeafC, BinC, NameC) -> Res where NilC: FnOnce(&mut A, Arg) -> Res, LeafC: FnOnce(&mut A, Leaf, Arg) -> Res, BinC: FnOnce(&mut A, Self::Lev, Self::Tree, Self::Tree, Arg) -> Res, NameC: FnOnce(&mut A, A::Name, Self::Lev, Self::Tree, Self::Tree, Arg) -> Res
Provided Methods
fn lev_max(a: &Self::Lev, b: &Self::Lev) -> Self::Lev
fn fold_lr<Res: Hash + Debug + Eq + Clone, LeafC, BinC, NameC>(st: &mut A, tree: Self::Tree, res: Res, leaf: &LeafC, bin: &BinC, name: &NameC) -> Res where LeafC: Fn(&mut A, Leaf, Res) -> Res, BinC: Fn(&mut A, Self::Lev, Res) -> Res, NameC: Fn(&mut A, A::Name, Self::Lev, Res) -> Res
fn fold_rl<Res: Hash + Debug + Eq + Clone, LeafC, BinC, NameC>(st: &mut A, tree: Self::Tree, res: Res, leaf: &LeafC, bin: &BinC, name: &NameC) -> Res where LeafC: Fn(&mut A, Leaf, Res) -> Res, BinC: Fn(&mut A, Self::Lev, Res) -> Res, NameC: Fn(&mut A, A::Name, Self::Lev, Res) -> Res
fn fold_up<Res: Hash + Debug + Eq + Clone, NilC, LeafC, BinC, NameC>(st: &mut A, tree: Self::Tree, nil: &NilC, leaf: &LeafC, bin: &BinC, name: &NameC) -> Res where NilC: Fn(&mut A) -> Res, LeafC: Fn(&mut A, Leaf) -> Res, BinC: Fn(&mut A, Self::Lev, Res, Res) -> Res, NameC: Fn(&mut A, A::Name, Self::Lev, Res, Res) -> Res
Implementors