An open API service indexing awesome lists of open source software.

https://github.com/alienkevin/curry-macro

Have fun currying using Rust's native closure syntax
https://github.com/alienkevin/curry-macro

Last synced: 11 months ago
JSON representation

Have fun currying using Rust's native closure syntax

Awesome Lists containing this project

README

          

# 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](https://github.com/Korede-TA/curry-macro).

# License
MIT