pub trait Algorithm { type Traversal<'t, L: 't + Language>: Traversal<'t, L>; fn traverse<L: Language>(node: Node<'_, L>) -> Self::Traversal<'_, L>; }