compose/lib.rs
1pub fn compose_2<A, B, C, G, F>(f: F, g: G) -> impl Fn(A) -> C
2where
3 F: Fn(B) -> C,
4 G: Fn(A) -> B,
5{
6 move |x| f(g(x))
7}
8
9#[macro_export]
10macro_rules! compose_n {
11 ( $last:expr ) => { $last };
12 ( $head:expr, $($tail:expr), + ) => {
13 compose_2($head, compose_n!($($tail),+))
14 };
15}