Of course, with a guarantee that only one copy will be in use at a time, you're free to implement the data as a mutable structure, as a practical optimization.
Of course, with a guarantee that only one copy will be in use at a time, you're free to implement the data as a mutable structure, as a practical optimization.
The main difference is that Haskell maintains uniqueness of only one secret paramter, the world, while linear or uniqueness types can do it on a per-value basis (which sounds to me like what you described.) The bad news is that this is much less interesting from a theoretical point of view---within the monad side effects are still unconstrained---but from a practical point of view it means imperative programming in haskell is pretty accessible, funny vocabulary notwithstanding.
That said, Haskell does allow more than just "the state of the world"--for instance, the State monad can contain whatever you like and (if memory serves me) is a strict superset of the IO monad.