Indeed this must be enabled explicitly somewhere, just as in Haskell.
Haskell faces the same problem, and it also requires a language extension. But their language flags are available to the whole compiler (parser included). OTOH, they're whole-file and I suspect sometimes you have to move code to a different file to get the right semantics.
"Purely functional" is not the question. Applicative Do was invented to launch jobs on a cluster, after all—that has plenty of side effects, just independent ones .