The line feels really sketchy to me.
Its like saying:
"Most language do not support simulating imperative programming via pure functional programing, and they just use imperative programming directly instead."
I'm guessing its about the "Moment" monad, and how it fits when working with things that are dependent on the moment in time they are executed.
And you know what. Haskell has no global mutable variables (that I'm aware of), so your forced to use the Monad, and compose it with Monad Transformers to capture what you need for your app. Working with a deep monad transformer stack can be a daunting experience, and can force your whole program to be written in terms of monads (tons of refactorying to an existing codebase). So its much easier to just make use of global mutable variables (and thus Transactions) in other languages. The Haskell guys are OK, because they're already using Monads for the effectful side of there programs anyway. (They are used to it.)
Rust is kinda in the same boat as Haskell. I'm not allow any global variables that have deconstructors (for memory management). The reason for this is because you can not garentee the order of execution of all the global cleanups, making it unsafe. So I have SodiumCtx
to keep pasing "All my globals" around function to function as a local variable. While this works, it does not have the proper Functor
, Applicative
, etc. interfaces (they are all carrying the extra "All my globals" local variable).