pub trait Lense {
type Object;
type Value;
fn get(&self, obj: &Self::Object) -> Self::Value;
fn set(&self, obj: &Self::Object, val: &Self::Value) -> Self::Object;
}
impl<O, V, G, S> Lense for L<O, V, G, S> where
G: Fn(&O) -> V,
S: Fn(&O, &V) -> O, type Object = O; type Value = V;
impl<'composite, OUTER, INNER, VALUE, L1, L2> Lense for Compose<'composite, OUTER, INNER, VALUE, L1, L2> where
L1: 'composite + Lense<Object = OUTER, Value = INNER>,
L2: 'composite + Lense<Object = INNER, Value = VALUE>, type Object = OUTER; type Value = VALUE;