pub trait Parser<I, O, E = ()>where
I: Input,{
// Required method
fn parse(&self, input: I) -> Result<I, O, E>;
// Provided method
fn map<F, O2>(self, f: F) -> Map<Self, F, O>
where Self: Sized,
F: Fn(O) -> O2 { ... }
}