//! Traversible binary trees. pub mod algorithms; use std::sync::Arc; use crate::flow::comparator::*; use crate::func::*; pub type Split<'a, T, A, D> = ( Arc>, Arc>, A, ); pub trait TraversibleBinaryNode<'a, T: Monad<'a>, A: 'a, D: 'a + PartialEq>: 'a + Send + Sync { fn split(&self) -> Split<'a, T, A, D>; fn to_tree(self: Arc) -> Arc>; } pub trait TraversibleBinaryReference<'a, T: Monad<'a>, A: 'a, D: 'a + PartialEq>: 'a + Send + Sync { fn resolve(&self) -> Wrap<'a, Arc>, T>; /// This should be enough to compare reference for equality. fn data(&self) -> D; } pub trait TraversibleBinaryTree<'a, T: Monad<'a>, A: 'a, D: 'a + PartialEq>: 'a + Send + Sync { fn refer(&self) -> Option>>; }