pub trait SelectionSet {
type Index;
// Required methods
fn to_vec(&self) -> Vec<Self::Index>;
fn contains(&self, index: &Self::Index) -> bool;
fn insert(&mut self, index: Self::Index);
fn remove(&mut self, index: &Self::Index);
fn clear(&mut self);
// Provided method
fn single(&mut self, index: Self::Index) { ... }
}