The idea of declarative debugging is to generate a computation tree and locate a node whose result is incorrect, but has correct results at all of its children nodes. This paper presents a (pseudo-)graphical system supporting the user in finding a buggy node.
Section 2 summarizes the constraint functional language TOY (with lazy semantics and pattern matching). In the next section, the author briefly defines the computation tree and discusses its simplification to reduce the number of questions the user must answer. The debugger is based on a transformed program that returns the computation tree in addition to the result. This transformation is described in section 4. Then, Caballero reviews a debugging session. The user can navigate through the tree, change the validity of nodes, remove valid subtrees, and so on, until the debugger is able to indicate the function definition that seems to be the cause of the error. In section 6, the author discusses some efficiency issues. Although the number of questions can be suitably reduced by the divide-and-query strategy, the memory overhead is the major drawback and restricts the application of the present system to small examples.
The paper is clearly written, and is an interesting contribution to debugging functional programs. The reader gets a good impression of the running system and its limits.