FP languages are just stupid
You can always (stupidly) rewrite int foo(goo&) into tuple<int, goo> foo(goo)
It maybe useful for parallelism, but hey it’s about the person not the language: one can write efficient no-side-effect OOP code if s/he is careful
Aaaaaaand most of the time we don’t need extremely no-side-effect restriction, we just want the side effects not “overlap” with each other