Documentation

The PhaseChange class ties together types which provide a mutable and an immutable view
on the same data. The mutable type must have a phantom type parameter representing the
state thread it is being used in. Many types have this type parameter in the wrong place
(not at the end): instances for them can be provided using the M1 and M2 newtypes.