use std::ops::{Range};
pub trait Rope {
type Cell: Clone;
type Attribute: PartialEq+Clone+Default;
fn len(&self) -> usize;
fn read_cells<'a>(&'a self, range: Range<usize>) -> Box<dyn 'a+Iterator<Item=&Self::Cell>>;
fn read_attributes<'a>(&'a self, pos: usize) -> (&'a Self::Attribute, Range<usize>);
}