The positive qualities of the approach of not using mutable program entities are well known:
Given the right state upon construction the immutable cannot be invalidated it during its whole lifetime
Immutable entities are easy to test
They do not require cloning or copy constructors
Immutable entities are automatically thread-safe
I must note that F# is not 100% strict about using immutable entities. As you may have already noticed, I used values, changing the state in my imperative and object-oriented solutions earlier. But the language requires the programmer to make an extra effort to introduce a changeable state (with the mutable
modifier to let
binding or via ref
cells, although F# 4.0 pretty much eliminates the need for the latter).
Also, the majority of data structures introduced by the language are also immutable, which means that a typical data transformation produces a new immutable instance of a data structure from the existing data structure. This consideration requires a certain caution from programmers when dealing with bulk in-memory instances, but as my experience has taught me, developers get used to this feature easily.