The “zipper” is a well known design pattern for providing a cursorlike interface to a data structure. However, the classic treatise by Huet only scratches the surface of some of the potential applications of the zipper. In this paper we take inspiration from Huet, and build a library suitable as an underpinning for a structured editor for programming languages. We consider a zipper structure that is suitable for traversing heterogeneous data types, encoding routes to other places in the tree (for bookmark or quick-jump functionality), expressing lexically bound information using contexts, and traversals for rendering a program indicating where the cursor is currently focused in the whole.
Tristan O. R. Allwood, Susan Eisenbach