pub trait Algorithm { type Traversal<'t, D: 't + Doc>: Traversal<'t, D>; // Required method fn traverse<D: Doc>(node: Node<'_, D>) -> Self::Traversal<'_, D>; }