Toolkits support the creation and use of reusable components. One of the most common application areas for toolkits is building user interfaces by combining widgets, especially graphical user interfaces. One benefit of using toolkits is that they make sophisticated interface features available to every programmer. If we can identify reusable components in the domain of error handling, perhaps we can provide toolkits which make it more likely that interface designers will include support for error handling in their interfaces.
The domain of interfaces for error handling has significant overlap with toolkits for building user interfaces. There are two key features that are needed to support error handling --complete reversibility, and support for keeping track of multiple potential interpretations at once. Without the former, the system may not easily be able to undo wrong choices which the user may have had no part in (and thus may be unable to help to correct). Without the latter, the system has to commit to a single interpretation at each stage, possibly throwing away potentially useful data. Incorporating multiple potential interpretations into the interface is also difficult without the support of the toolkit.
There is a lot of work on introducing undo/ reversibility into GUI toolkits, particularly in the object-oriented toolkits. For example, the Amulet system supports both regular and selective undo (Myers & Kosbie, 1996). A more theoretical treatment of the subject can be found in Thimbleby's (1990) book on User Interface Design.
In addition, both reversibility and support for multiple potential interpretations were addressed in the work of Hudson & Newell (1992) on probabilistic state machines for handling input. However, this work focused on the event handling stage of an interface toolkit and is most applicable to handling visual feedback. For example, if there is uncertainty as to whether the user is pointing at button A or button B, a probabilistic state machine would simplify the task of highlighting both buttons. However, it is not clear that the same system could keep track of the multiple potential system states that might result from potentially pressing both buttons.
In experimenting with the best way to support correction in PenPad (see Figure 1), the need for a toolkit became immediately obvious. Even attempts at a simple problem such as trying out different approaches to displaying differing numbers of alternatives around each handwritten word are hindered by the lack of toolkit level support. One of our first goals is to create a toolkit which will help to solve these problems. This infrastructure will also simplify the task of comparing and testing techniques.