Iterator::zip converts two streams into a new stream of tuples (containing items of both streams). Iterator::chain converts two streams into a new stream that first exhausts the first stream, and then the second stream. It feels like we need a combinator to exhaust out of order
You're spot on actually; the latter would only ever apply to streams. I've kind of been thinking of the two as the same thing mostly, but I think you're right and this is actually a point where they diverge!