Why functional programming matters
The Computer Journal - Special issue on Lazy functional programming
A syntactic theory of sequential state
Theoretical Computer Science
Lazy debugging of lazy functional programs
New Generation Computing
A debugging environment for lazy functional languages
Lisp and Symbolic Computation
Theory and art of semantics-directed program execution monitoring
Theory and art of semantics-directed program execution monitoring
A call-by-need lambda calculus
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Formal verification of parallel programs
Communications of the ACM
ESOP '01 Proceedings of the 10th European Symposium on Programming Languages and Systems
Algorithmic Debugging for Lazy Functional Languages
PLILP '92 Proceedings of the 4th International Symposium on Programming Language Implementation and Logic Programming
Tracing Lazy Functional Computations Using Redex Trails
PLILP '97 Proceedings of the9th International Symposium on Programming Languages: Implementations, Logics, and Programs: Including a Special Trach on Declarative Programming Languages in Education
HsDebug: debugging lazy programs by not being lazy
Haskell '03 Proceedings of the 2003 ACM SIGPLAN workshop on Haskell
Structure and Properties of Traces for Functional Programs
Electronic Notes in Theoretical Computer Science (ENTCS)
A lightweight interactive debugger for haskell
Haskell '07 Proceedings of the ACM SIGPLAN workshop on Haskell workshop
Finding the needle: stack traces for GHC
Proceedings of the 2nd ACM SIGPLAN symposium on Haskell
Semantics Engineering with PLT Redex
Semantics Engineering with PLT Redex
Hi-index | 0.00 |
Reasoning about misbehaving lazy functional programs can be confusing, particularly for novice programmers. Unfortunately, the complicated nature of laziness also renders most debugging tools ineffective at clarifying this confusion. In this paper, we introduce a new lazy debugging tool for novice programmers, an algebraic stepper that presents computation as a sequence of parallel rewriting steps. Parallel program rewriting represents sharing accurately and enables debugging at the level of source syntax, minimizing the presentation of low-level details or the effects of distorting transformations that are typical for other lazy debuggers. Semantically, our rewriting system represents a compromise between Launchbury's store-based semantics and an axiomatic description of lazy computation as sharing-via-parameters. Finally, we prove the correctness of our tool by showing that the stepper's run-time machinery reconstructs the expected lazy rewriting sequence.