One thing I don't like about using the "catch" keyword for this is that it doesn't really correspond to what catch does in other languages. Here, it stops auto-propagation of returning a Result and instead assigns what would've been returned as the result of the catch block, but, if no error is returned, then the result of the catch block is the result of the expression. Normally a "catch" corresponds to, "In the event of error, do this other thing instead". This is more like, "In the event of error, make the result the error, otherwise make the result the result".
For that reason, the word, "catch" just doesn't feel quite right. That being said, I'm not sure what would feel better. Some possibilities:
- coalesce
- fuse
- unite
- cohere
- consolidate
- unify
- combine
In other words, a "word" that indicates that the actual result or error that might be returned will be combined/coalesced/unified into the result of the block.
Alternatively, "resultof", so it would be:
let x = resultof {
let y = something_else(something?)?;
process(y + 2)? * 3
};