[no description]
-rw-r--r--src/fns.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/fns.rs b/src/fns.rs
index f4866e4..23b0b00 100644
--- a/src/fns.rs
+++ b/src/fns.rs
@@ -15,3 +15,26 @@ pub fn at<const N: usize, U, T: Tupl + RePick<N, U>>(
T::unpick(l, f(a), r)
}
}
+
+pub mod r {
+ use super::*;
+ pub fn on<'a, const N: usize, U, T: Tupl<AsRef<'a>: Pick<N>> + 'a>(
+ mut f: impl FnMut(<T::AsRef<'a> as Pick<N>>::At) -> U,
+ ) -> impl FnMut(&'a T) -> U {
+ move |x| f(x.as_ref().pick())
+ }
+ pub fn at<
+ 'a,
+ const N: usize,
+ U,
+ T: Tupl<AsRef<'a>: RePick<N, U>> + 'a,
+ >(
+ mut f: impl FnMut(<T::AsRef<'a> as Pick<N>>::At) -> U,
+ ) -> impl FnMut(&'a T) -> <T::AsRef<'a> as RePick<N, U>>::New {
+ move |x| {
+ let x = x.as_ref();
+ let (l, a, r) = x.depict();
+ <T::AsRef<'a>>::unpick(l, f(a), r)
+ }
+ }
+}