#closures #curry #function #fp

curry-macro

Have fun currying using Rust's native closure syntax

1 unstable release

0.1.0 Mar 30, 2020

#2656 in Rust patterns

MIT license

5KB

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:

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:
let add = curry!(|a, b| a + b);
assert_eq!(add(1)(2), 3);
  1. With input type annotations:
let add = curry!(|a: i32, b: i32| a + b);
  1. With input and return type annotations and a block as function body
let add = curry!(|a: i32, b: i32| -> i32 { a + b });

The above three functions work the same:

// 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

No runtime deps