A struct representing an editable data structure.
It allows for editing, undoing, and redoing actions on the data.
It also maintains a history of actions performed on the data.
An action that takes a snapshot of the data before executing.
If the action fails, it restores the data to its previous state.
Mostly useful for clonable data types. On undo it restores the data
to the state before the action was executed.