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}