curry-macro

Have fun currying using Rust's native closure syntax.

Example

You can curry an add function that adds two numbers.

First, import the curry macro: rust use curry_macro::curry; Then, you have three forms of function definitions to choose from:

  1. Simplest form, without any type annotations. You need to use the curried function so that the rust compiler can infer the input and return types for you: rust let add = curry!(|a, b| a + b); assert_eq!(add(1)(2), 3);

  2. With input type annotations: rust let add = curry!(|a: i32, b: i32| a + b);

  3. With input and return type annotations and a block as function body rust let add = curry!(|a: i32, b: i32| -> i32 { a + b });

The above three functions work the same: rust // You can generate intermediate functions that are partially applied: let add1_to = add(1); let sum = add1_to(2); assert_eq!(sum, 3); // You can also can apply all arguments at once: let sum = add(1)(2); assert_eq!(sum, 3);

Credits

Big thanks to Korede-TA for his awesome curry-macro.

License

MIT