One thing the author fails to mention, is that monads can't _annotate_ the terms. They can not replace effects in the type system, since something `putStrLn` doesn't _cause_ an effect, it _returns_ it. In a strict language,
even if you have something like `putStrLn :: String -> IO ()`, you can not do
`let _ = putStrLn "d" in x` and have it not print it, unless `IO` wraps the computation in a lambda, which is quite suboptimal.<p>Hence, monads are not a replacement for effects, even if people are making things like <a href="https://github.com/haskell-effectful/effectful/" rel="nofollow">https://github.com/haskell-effectful/effectful/</a>.