A type is an immutable type if:
1) it is illegal to copy a reference of that type, so there can be no aliasing
2) for every instance method of that type, this and every other parameter of that type is a restores-mode parameter
3) that type has a no-argument constructor
4) a function method may not return a result of that type