rust currying, preset some arguments

To curry a function in Rust and preset some arguments, you can use closures or the partial_fn crate. Here's an example using closures:

fn add(a: i32, b: i32) -> i32 {
    a + b
}

fn main() {
    let add_5 = |b| add(5, b);
    println!("Result: {}", add_5(3)); // Output: Result: 8
}

In this example, we define a function add that takes two arguments and returns their sum. We then create a closure add_5 that captures the value 5 and takes a single argument b. When add_5 is called with an argument, it invokes the add function with the preset value of 5 and the provided argument b.

Alternatively, you can use the partial_fn crate to achieve currying in Rust. Here's an example using the partial_fn crate:

use partial_fn::partial;

fn add(a: i32, b: i32) -> i32 {
    a + b
}

partial!(add_5: add, 5);

fn main() {
    println!("Result: {}", add_5(3)); // Output: Result: 8
}

In this example, we use the partial_fn crate to create a partial function add_5 that is a curried version of the add function with the first argument preset to 5. When add_5 is called with an argument, it invokes the original add function with the preset value of 5 and the provided argument b.

Please note that the partial_fn crate is a third-party crate and needs to be added to your Cargo.toml file for it to work.