3 stable releases
new 5.0.1  Nov 29, 2023 

5.0.0  Nov 27, 2023 
4.0.0  Oct 15, 2023 
3.0.1 

1.0.1 

#331 in Procedural macros
60 downloads per month
12KB
239 lines
set_builder
A procedural macro to create Iterators over a set defined by Haskellinspired setbuilder notation.
It should be noted that these "sets" are not true sets in the sense that there is no guarantee that the members (elements) of the set are unique.
Syntax
Complex Set
// The pattern of the binding(s)
// │
// Mapping │ ┌── Expression that evaluate into types implementing `IntoIterator`.
// expression │ │
// │ │ │ ┌─ Predicate that evaluates to `bool`
// ▼ ▼ ▼ ▼
set![ expr : $($(pat < expr)  $(expr)),* ]
Simple Enumeration Set
This is only provided for mathematical parity and returns arrays rather than Iterators,
array syntax [...]
should always be preferred to this.
// ┌─ Values to put in the set
// ▼
set![ $(expr),* ]
Examples
use set_builder::set;
// Singlebinding set with a predicate
let set = set![ x * 2 : x < [1, 2, 3], *x > 1 ];
assert_eq!(set.collect::<Vec<_>>(), [4, 6]);
// Cartesian product without a predicate
let set = set![ (x, y) : x < [1, 2], y < [3, 4] ];
assert_eq!(set.collect::<Vec<_>>(), [(1, 3), (1, 4), (2, 3), (2, 4)]);
// Simple enumeration
let set = set![ 1, 2, 3, 4, 5 ];
assert_eq!(set, [1, 2, 3, 4, 5]);
Dependencies
~0.4–0.8MB
~19K SLoC