[Haskell] PersistentDocument: A library for dealing with undo and
file management in Haskell
Arjan van IJzendoorn
afie at cs.uu.nl
Thu Dec 9 09:10:06 EST 2004
In our Bayesian network editor Dazzle with a wxHaskell GUI there were
two places where we needed to maintain a document that can be saved to
disk. And we wanted to have undo (and redo) in both places. Of course,
we didn't want to write this functionality twice. After factoring out
the common parts the library is so general that it might be useful for
others writing editors, too.
The library takes care of maintaining a document, keeping track of
whether it is dirty (changed w.r.t. disk version), providing save and
save as functionality, enabling and disabling menu items, updating the
title bar, warning if you try to close a document that is "dirty",
dealing with unlimited undo/redo and more.
The reason for combining undo/redo and file management is because there
is interaction between them. For example, when you save a file, the
versions of the document in the undo and redo buffers become "dirty".
All in all, it is quite subtle code that you don't want to write time
If you are writing some kind of editor and are interested in using the
library, check out the (heavily documented) source code at:
The zip contains three files:
1) PersistentDocument.hs: the implementation of what is described above.
This module is not dependent on wxHaskell by the way.
2) PDDefaults.hs: default implementations of the call-back functions in
3) PDDemo.hs: a demo application allowing you to edit a list of strings.
It uses the two other files and thus supports undo/redo and cool file
management for "free". In the demo file you can see how to start it.
If you have suggestions for better names, need functions that are not in
the interface or you have any other comment, send it to
wxhaskell-users at lists.sourceforge.net
At some point this functionality will be added to the wxHaskell
distribution. However, I first want to let other people have a look at
it and process their comments.
Have fun, Arjan
PS: If you want to see what our Dazzle editor looks like, go to
More information about the Haskell