pub trait Paired {
type Item;
// Required methods
fn get_left(&self) -> &Self::Item;
fn get_right(&self) -> &Self::Item;
fn get_left_mut(&mut self) -> &mut Self::Item;
fn get_right_mut(&mut self) -> &mut Self::Item;
fn swap(&mut self);
// Provided methods
fn get(&self, s: Side) -> &Self::Item { ... }
fn get_mut(&mut self, s: Side) -> &mut Self::Item { ... }
}