What the for loop actually expands to is much easier to read.
[<label>] for <pat> in <iterator expression> { ... }
let __iterator = &mut <iterator expression>;
<label> loop {
match __iterator.next() {
None => break,
Some(<pat>) => { ... }
}
}