use crate::{Pick, RePick, Tupl}; pub fn on>( mut f: impl FnMut(T::At) -> U, ) -> impl FnMut(T) -> U { move |x| f(x.pick()) } pub fn at>( mut f: impl FnMut(T::At) -> U, ) -> impl FnMut(T) -> T::New { move |x| { let (l, a, r) = x.depict(); T::unpick(l, f(a), r) } } pub mod r { use super::*; pub fn on<'a, const N: usize, U, T: Tupl: Pick> + 'a>( mut f: impl FnMut( as Pick>::At) -> U, ) -> impl FnMut(&'a T) -> U { move |x| f(x.as_ref().pick()) } pub fn at< 'a, const N: usize, U, T: Tupl: RePick> + 'a, >( mut f: impl FnMut( as Pick>::At) -> U, ) -> impl FnMut(&'a T) -> as RePick>::New { move |x| { let x = x.as_ref(); let (l, a, r) = x.depict(); >::unpick(l, f(a), r) } } }