Why have immutable data structures not taken over in the general case if it's a strict improvement? Sometimes they're good and sometimes there not. The issue is functional programming needs them to be used in every case.
Personally I'm of the opinion that purity is impossible so if a paradigm needs purity it's going to be an uphill battle.
FP doesn’t require their use in every case. For example, Clojure allows mutation as an optimization. But for the normal path, immutable data structures are just fine and help avoid a whole host of bugs.
Personally I'm of the opinion that purity is impossible so if a paradigm needs purity it's going to be an uphill battle.