It's an interesting question, why immutability is not built into more languages as the default, so that the most intuitive syntax of assignment produces new values.

Without having any expertise in the matter, I'd guess that mutability has the advantage of performance and efficient handling of memory.

  obj.foo[5].bar.a = 2
An immutable interpretation of this would involve producing new objects and arrays, moving or copying values.

Another possible advantage of the mutable default is that you can pass around references to inner values.

That's always the case with immutable data structures; this assignment syntax didn't create that problem. If you used lenses to write 2 into "a", and you expected to get back a new "obj", you would still need to produce all those new objects and arrays. That's just immutable data structure stuff. I'm only asking about the assignment syntax here.