-
Open the Cargo.toml file that has been generated earlier for you.
-
In the bin folder, create a file called compose_functions.rs.
-
Add the following code, and run it with cargo run --bin compose_functions:
1 #![feature(conservative_impl_trait)] 2 3 // The compose! macro takes a variadic amount of closures and
returns 4 // a closure that applies them all one after another 5 macro_rules! compose { 6 ( $last:expr ) => { $last }; 7 ( $head:expr, $ ($tail:expr), +) => { 8 compose_two($head, compose!($ ($tail), +)) 9 }; 10 } 11 12 // compose_two is a helper function used to 13 // compose only two closures into one 14 fn compose_two<FunOne, FunTwo, Input, Intermediate, Output>( 15 fun_one: FunOne, 16 fun_two: FunTwo, 17 ) -> impl Fn(Input) -> Output 18 where 19 FunOne: Fn(Input) -> Intermediate, 20 FunTwo: Fn(Intermediate) -> Output, 21 { 22 move |x| fun_two(fun_one(x)) 23 } 24 ...