this post was submitted on 07 Aug 2025
71 points (100.0% liked)
Rust
7403 readers
74 users here now
Welcome to the Rust community! This is a place to discuss about the Rust programming language.
Wormhole
Credits
- The icon is a modified version of the official rust logo (changing the colors to a gradient and black background)
founded 2 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
It's rare to a have a negative reaction to a library addition. But I don't like this one at all actually.
For me, error contexts are as important as the errors themselves. And ergonomically helping with muddying these contexts is not a good thing!
What scenarios do you envision a Result<Result<T, E>, E> having a different meaning than a Result<T, E>? To me, the messy Result type just seems like a case of something that should've been handled already (or properly propagated up).
(stating the obvious)
You can already :
With
res_res.flatten()?
, you don't know where you got the error anymore, unless the error type itself is "flatten-aware", which is a bigger adjustment than the simple ergonomic library addition, and can become itself a problematic pattern with its own disadvantages.Wait, so you say
res_res??
gives more information thanres_res.flatten()?
, do you?I mean, this is a very trivial case and not best suited for flatten at all, but the information is lost in exactly the same way
Yes. Note that I'm replying to this:
My point was that without flattening, "provide context and propagate" vs. "directly propagate" is always explicit and precise, and is obviously already supported and easy to do.
Use with functional chaining, as pointed out by others, wasn't lost on me either. I've been using
Option::flatten()
for years already, because such considerations don't exist in that case.