pub fn mutating(mut v: T, f: F) -> T where F: Fn(&mut T), { f(&mut v); v } pub fn sideeffect(v: T, f: F) -> T where F: Fn(&T), { f(&v); v }