pub trait Evolution<I>where
I: Copy,{
// Required methods
fn value(&self) -> I;
fn old_value(&self) -> I;
// Provided methods
fn delta(&self) -> <I as Sub>::Output
where I: Sub { ... }
fn evolution(&self) -> PreviousValue<I> { ... }
}