pub trait Access {
type Target;
// Required method
fn get(&self) -> Self::Target;
// Provided method
fn map<T, B, F>(self, from: F) -> MapAccess<Self, F>
where Self: Sized + Access<Target = T>,
F: Fn(T) -> B { ... }
}