2 ms·
It doesn't, because you can wrap and unwrap Results at will, so you can change "color" of such functions, and you're never irrecoverably stuck with just one col
by pornel 6y ago
It doesn't, because you can wrap and unwrap Results at will, so you can change "color" of such functions, and you're never irrecoverably stuck with just one color.
The original article's key point was about async forcing refactoring of all functions in the entire call graph just because a leaf function needed it. This doesn't apply to async or options in Rust, because Rust functions can use these features without exposing that fact to their callers.
- the_gipsy 6y agoThat's what I'm saying, you can change the "color" of all these including async, but you still have to do that. There is no single Monad type from which you can build and chain, you always have to color some calls.
- pornel 6y agoNo, you can abstract over "color". You can implement a trait that lets you call both sync and async functions in the same way. You can with the same code and same syntax, get results of either `Fn()->T` or `Fn()->Future<Output=T>`.
- the_gipsy 6y agoYou are right, it doesn't "poison" your code, you can always wrap or map it. I guess I was just going off some tangent.