This is an undo/redo framework based on a functional approach which uses a undoable stack …
http://bitbucket.org/aquavitae/undo