Break with value alternatives

On the note of Error type in Result. I see this as exactly the same problem as implementing a trait, say Write, and wanting to provide more meaningful errors. You just can't without some workarounds. Also, I don't think that this is a common issue, so I'm fine with pessimizing it.

The compiler already has to do inhabitedness checking, so this should be fine.

Also on the note of inhabitedness, in the past there have been miscompiles when using structs that contain uninhabited types because you could do something like,

So now, all structs treat uninhabited types as normal zero-sized types, and don't inherit inhabited. Also partial initialization is prohibited.

So type theory, while nice, doesn't completely line up with Rust.

I don't remember that thread at all, so probably not.

In case you didn't know, this is how for loop desugars right now,

for $var in $into_iter {
    $code
}
let __iterator = IntoIterator::into_iter($into_iter);

loop {
    match Iterator::next(&mut __iterator) {
        Some($var) => { $code },
        None => break
    }
}

Please show how your method would desugar a for loop, because if it can't then it is more complex then generators

for loops are not primitive constructs in Rust.