comprehension-rs
Iterator comprehension in Rust
Usage
The syntax is derived from Haskell's list comprehension. This library use iterators instead of lists.
// this returns the iterator generates `[0, 1, 4, ..., 81]`
iter!;
You can also use patterns in generators,
iter!;
// => [1, 6, 20]
filtering values,
iter!.take
// => [(1, 1), (2, 1), (2, 2), (2, 3), (2, 4), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)]
and let bindings.
iter!.take;
// => [(1, 1), (2, 1), (2, 2), (2, 3), (2, 4), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)]
Some useful variants are provided.
vect!
returns Vec
:
// just same as iter![].collect::<Vec<_>>()
vect!;
sum!
return sum of iterator:
let t = sum!; // => 55
// same as this:
// let t = iter![x; x <- 1..=10].sum()
// but this does not compiles (need type annotation).
let t = iter!.
// `sum!` can infer the return type, so it has non-trivial functionality.
Also has product!
macro:
let t = product!; // => 3628800