pub trait TypedArray<T> {
    // Required methods
    fn as_slice(&self) -> &[T];
    fn as_mut_slice(&mut self) -> &mut [T];
    // Provided methods
    fn to_vec(&self) -> Vec<T>
       where T: Clone { ... }
    fn copy_from_slice(&mut self, slice: &[T])
       where T: Copy { ... }
    fn clone_from_slice(&mut self, slice: &[T])
       where T: Clone { ... }
}