No, you aren't. In OCaml, you can use mutable references, they're just not the default. Erlang has process dictionaries. Etc.
Haskell is unusually strict in that regard, turning what is normally a design option into an all-or-nothing situation.
Edit: I know there are a few ways around it via monads, but the culture surrounding Haskell seems quite a bit more likely to treat state/purity as an all-or-nothing issue than the others'. Maybe I'm making inaccurate assumptions about Haskell based on the loudest members of its community, though.
Not really. Mutable refs are provided by ST, which allows for chunks of your program where you are mutating state, but where the mutable state can't leak outside of boundaries you set.
(There is also the good-old-IORef, but I avoid IO for anything that's not input or output.)
Haskell is unusually strict in that regard, turning what is normally a design option into an all-or-nothing situation.
Edit: I know there are a few ways around it via monads, but the culture surrounding Haskell seems quite a bit more likely to treat state/purity as an all-or-nothing issue than the others'. Maybe I'm making inaccurate assumptions about Haskell based on the loudest members of its community, though.