Personally I think local mutability is quite a useful property, which was part of the inspiration for making this instead of just another pure functional language:
- All functions are still referentially transparent, which means we get all the local reasoning benefits of pure functions.
- We can mutate local variables inside loops (instead of just shadowing bindings), which makes certain things a lot easier to write (especially for beginners).
- Mutating nested fields is super easy: `set foo.bar[0].baz = 1;` (compare this to the equivalent Haskell).
But those go further in that they don't even have any mutable data. Instead of
Haskell has