pub trait TupleMapperFirst<Input, Output, Result> where Self: Sized, { fn map_first(self, mapper: impl Fn(Input) -> Output) -> Result; }