So that code like this: ```rust iproduct!(0..4, 0..4, 0..4) ``` becomes the more succinct: ```rust iproduct!(0..4; 3) ``` This would mandate vectors instead of tuples for the items. It would help for when the dimension isn't known until runtime: ```rust fn truth_table(dim: usize) → Box<Iterator<Item = Vec<bool>>> { Box::new(iproduct!([false, true].iter(); dim)) } ```