External Publication
Visit Post

Pre-RFC improved ergonomics for `!`

Rust Internals [Unofficial] May 19, 2026
Source

relying on Try doesn't add any real complexity IMO. It's the equivalent of .map(|x| try { x? }) rather than .map(|x| x). And feels safer to me right now (vs. simple coercion) as it requires the type author to have specifically approved the conversion.

Yes, inside my own codebase I can handle this fine but I'm loathe to include any Option<Result<!,E>> etc. in a public API. At that point I push the "pain" onto anyone downstream who now needs to add a map to almost every call. So I end up with Option<Result<(), E>> and a note in the docs that this should never be Some(Ok(_)) with no actual compiler guarantees on that (something else for me to think about during code-review, sad for never, and stops users being able to let(Err(e)) = ignore_blocking(e)?).

Discussion in the ATmosphere

Loading comments...