chj_rustbin/fp.rs
1/// Invert the boolean result of a function.
2pub fn complement<T>(f: impl Fn(T) -> bool) -> impl Fn(T) -> bool {
3 move |c: T| -> bool { !f(c) }
4}
5
6pub fn on<T, K, R>(
7 access: impl Fn(&T) -> K,
8 cmp: impl Fn(K, K) -> R,
9) -> impl Fn(&T, &T) -> R {
10 move |a: &T, b: &T| cmp(access(a), access(b))
11}
12
13pub fn compose<A, B, C>(
14 f: impl Fn(A) -> B,
15 g: impl Fn(B) -> C,
16) -> impl Fn(A) -> C {
17 move |x| g(f(x))
18}