How so? I was under the impression you had to explicitly go out of your way to break functional purity/ use mutable state in Clojure, just like Haskell.
Is it easier/harder/more-unwieldy to maintain functional purity in one of them over the other?
IO isn't expressed in the type in idiomatic Clojure (it's dynamically typed anyway), whereas it is in idiomatic Haskell (to great effect and occasional mild annoyance).