You can still intersperse check!() calls if that is a problem.
Result-chaining has also advantages, it allows error handling other than early returning the error value, like:
match foo()?.bar()?.filter() {
Ok(value) => ...
Err(e) => return &[],
}
Map is clunky and requires an explicit closure.
This is actually the only point that I agree with and that I wasn’t aware of.
I’d say it’s the opposite. The check!() makes it crystal clear where the returns are happening.
With ? for early return, returns can happen basically everywhere. I’d like to have as few “points of return” as possible, as many as necessary.
I guess all we can do is acknowledge that we disagree…