1pub trait Lens<S, A> { 2 fn over(s: &S, f: &Fn(Option<&A>) -> A) -> S { 3 let result: A = f(Self::get(s)); 4 Self::set(result, &s) 5 } 6 fn get(s: &S) -> Option<&A>; 7 fn set(a: A, s: &S) -> S; 8}