I thing a possible solution would be to extend the iterator returned by zip with a additional method witch is like zip but includes the new item into the retuned tuples e.g.:
for (x,y,z) in (1..10).zip(2..11).and(3..12) {
//...
}
(and is just a example name)
note that I an not sure how feasible it is to implement this due to the need of generically
Generating tuples preferable without macros.
Neverless it should be possible.
Note that a (1..10, 2..11, 3..12) is not possible because it is a touple of iterators and iterating over a touple would (if it would be possible) lead to yielding each value respectivly, what might be possible is something like
for (x,y,z) in (1..10, 2..11, 3..12).into_combined_iterator() {
//...
}
(You might have a shorter name)
Also note that changing the zip method on a iterator created by ziping to behave different
Would be unsound. E.g if someone might have some iterator over tuples and then zip it the result should be independent whether or not the first iterator was created by e.g. iter. over a Vec of tuples or by zipping 2 iterators.