This library provides a class for types which present the same underlying data in both an immutable (frozen) as well as a mutable (thawed) form,
and various functions to manipulate them. Some of the functions allow for copy elision.
Instances are provided for the array types from the primitive, array, and vector packages, but this is mainly for completeness: there is
nothing these instances do which vector doesn't already do better. The main purpose, rather, is to assist new types, for instance types whose implementation relies on destructive-update foreign imports, and cases when writing a full stream fusion framework isn't practical.
There are three modules: