pub trait Expression: Clone { fn variable(index: usize) -> Self; fn abstraction(body: Self) -> Self; fn application(l: Self, r: Self) -> Self; }