pub trait HyperAST<'store> {
type IdN: NodeId<IdN = Self::IdN>;
type Idx: PrimInt;
type Label;
type T: Tree<TreeId = Self::IdN, Label = Self::Label, ChildIdx = Self::Idx>;
type NS: 'store + NodeStore<Self::IdN, R<'store> = Self::T>;
type LS: LabelStore<str, I = Self::Label>;
type TS: TypeStore<Self::T, Ty = <Self::T as Typed>::Type>;
// Required methods
fn node_store(&self) -> &Self::NS;
fn label_store(&self) -> &Self::LS;
fn type_store(&self) -> &Self::TS;
// Provided methods
fn decompress<D: DecompressedSubtree<'store, Self::T, Out = D>>(
&'store self,
id: &Self::IdN
) -> (&'store Self, D)
where Self: Sized { ... }
fn decompress_pair<D1, D2>(
&'store self,
id1: &Self::IdN,
id2: &Self::IdN
) -> (&'store Self, (D1, D2))
where Self: Sized,
D1: DecompressedSubtree<'store, Self::T, Out = D1>,
D2: DecompressedSubtree<'store, Self::T, Out = D2> { ... }
}