1 unstable release
0.1.0 | Jun 19, 2021 |
---|
#28 in #closure
7KB
placeholder_closure
Scala's Placeholder Syntax for Rust.
use placeholder_closure::λ;
let xs = xs.into_iter().map(λ!($ + 1)).collect::<Vec<_>>();
fn dot<F: FnOnce(Y) -> Z, G: FnOnce(X) -> Y, X, Y, Z>(f: F, g: G) -> impl FnOnce(X) -> Z {
λ!(move { f(g($)) })
}
Usage
See the documentation on Docs.rs.
License
Licensed under CC0-1.0.
lib.rs
:
Scala's Placeholder Syntax for Rust.
# let xs = vec![1, 2, 3, 4, 5];
use placeholder_closure::λ;
let xs = xs.into_iter().map(λ!($ + 1)).collect::<Vec<_>>();
How it works
The λ!
(or lambda!
) macro replaces 0 or more $
characters with closure arguments.
# use placeholder_closure::λ;
let f = λ!($ + 1);
# let _: fn(i32) -> i32 = f;
will be:
# use placeholder_closure::λ;
let f = |__0| __0 + 1;
# let _: fn(i32) -> i32 = f;
Constructing move
closures
You can also construct move
closures.
# use placeholder_closure::λ;
fn dot<F: FnOnce(Y) -> Z, G: FnOnce(X) -> Y, X, Y, Z>(f: F, g: G) -> impl FnOnce(X) -> Z {
λ!(move { f(g($)) })
}
Dependencies
~0.9–1.2MB
~30K SLoC