Seems like the author doesn't understand what's going on.
Seems like the author doesn't understand what's going on.
He's a well-known language designer, famous for his work in dataflow, whose work was influential in the field. We should ask him to explain what he meant by that, before jumping to internet cheap shots.
It looks imperative because that's what Haskell's do-notation was designed to. But it's merely syntactic sugar for the functional equivalent
main = putStrLn "Hello, World!" >> return ()
which btw is equivalent to simply main = putStrLn "Hello, World!"If the author really doesn't like the "imperative" syntactic sugar then it's always possible to write equivalent code without it, but it quickly becomes painful for more complex situations.
'do notation' is just a more generalised version of what async/await does. No one wants to go back to writing async code with callbacks / continuations.