pub trait Parser<T = Node> {
// Required method
fn parse(&self, state: &mut State) -> T;
// Provided methods
fn map<F>(self, f: F) -> Map<Self, F, T>
where Self: Sized { ... }
fn boxed<'a>(self) -> Box<dyn Parser<T> + 'a>
where Self: 'a + Sized { ... }
fn arc<'a>(self) -> Arc<dyn Parser<T> + 'a>
where Self: 'a + Sized { ... }
}