In most imperative and object oriented programming languages, it is common to implement data structures that support destructive updates. That is, operations for which we accept that previous versions of the structure is no longer available after performing the operation. We say that a data structure is _ephemeral_, when it only supports a single version.
In functional programming, it is common that old versions of a data structure are always available for further processing. When a data structure supports multiple versions in this way, we say that the data structure is persistent.
The topic of this thesis, is to choose a collection of ephemeral data structures, and produce a collection of persistent variations of the structure. The student is expected to provide analyse the asymptotic behaviour of their results, as well as address the issue of deciding if the complexity of their solution is asymptotically optimal.