Debugging Lazy Functional Programs by Asking the Oracle

The complexity of lazy evaluation forbids classic debugging techniques like a simple step-by-step representation of the buggy program run. Therefore, most sophisticated tools for finding bugs in lazy functional programs try to display the run as if the program's underlying semantics was strict. In order to provide such a strict representation, current approaches gather a lot of information about the executed program. We utilized a new technique to drastically reduce the amount of gathered data and show how to use the reduced information to implement a debugging tool which supports declarative debugging as well as a strict step-by-step tracer.