I have absolutely zero interest and will avoid touching or using any of these new direct style things. I’m sorry, I really like my monads and everything being values that can be manipulated. The few bits I’ve read on the direct style libs and videos/presentations are very confusing for my small stupid brain and I cannot really understand the flow of code. I would go for another language instead if I wanted something like that.
But we will see if in 8 years these become mainstream and we will have multiple codebases with all these variations running and even more hell to maintain and use them. I can only see more frustration coming.
I feel it’s good for things to be explored and tried, but I can bet some of these will end up being used for real and then instead of codebases mixing just futures and IOs we will have even more combinations all mixed together.
Interesting take. I’m personally fine with either style, but I can’t go as far as pretending that the monadic one is ergonomic. I don’t think it’s a great way to develop in general, “Monads don’t compose” is a reality, and having “do-it-all/God Monad” is band-aid for hardly managing to shove everything in a “mother-of-all” for-comprehension.
I believe that a majority spontaneously rejects monadic style, for good and bad reasons. It used to be a necessity when there were fewer options out there for performant asynchronous programming. The “program is a value” argument is that of a leaky abstraction as soon as purity isn’t enforced (for which, interestingly, caprese/capture-checking and “direct-style” might help).
In all, the monadic style has always been pretty niche, except in the rare occasions there was no compelling alternative. I don’t expect it will see more adoption. What it was promising to deliver on a theoretical-level only (referential transparency) will be accomplished in a more straightforward manner. Runtimes may or may not catch-up with the performance of effect systems, it won’t matter for the vast majority of the programs. And if you are in this niche, then nothing will change for you except for the few compiler guarantees brought by capture-checking.



