A natural semantics for lazy evaluation
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Why no one uses functional languages
ACM SIGPLAN Notices
Data flow analysis of applicative programs using minimal function graphs
POPL '86 Proceedings of the 13th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
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
Proving the Correctness of the STG Machine
IFL '02 Selected Papers from the 13th International Workshop on Implementation of Functional Languages
Parallel functional programming at two levels of abstraction
Proceedings of the 3rd ACM SIGPLAN international conference on Principles and practice of declarative programming
HsDebug: debugging lazy programs by not being lazy
Haskell '03 Proceedings of the 2003 ACM SIGPLAN workshop on Haskell
Formally deriving an STG machine
Proceedings of the 5th ACM SIGPLAN international conference on Principles and practice of declaritive programming
Practical aspects of declarative debugging in Haskell 98
Proceedings of the 5th ACM SIGPLAN international conference on Principles and practice of declaritive programming
How to look busy while being as lazy as ever: the Implementation of a lazy functional debugger
Journal of Functional Programming
Deriving a lazy abstract machine
Journal of Functional Programming
Testing speculative work in a lazy/eager parallel functional language
LCPC'05 Proceedings of the 18th international conference on Languages and Compilers for Parallel Computing
Observing intermediate structures in a parallel lazy functional language
Proceedings of the 9th ACM SIGPLAN international conference on Principles and practice of declarative programming
Hi-index | 0.00 |
Reasoning about functional programs is simpler than reasoning about their imperative counterparts. However, finding bugs in lazy functional languages has been more complex until quite recently. The reason was that not much work was done on developing practical debuggers. Fortunately, several debuggers exist nowadays. One of the easiest to use Haskell debuggers is Hood, whose behavior is based on the concept of observation of intermediate data structures. However, although using Hood can be simple when observing some structures, it is known that it can be hard to understand how it works when dealing with complex situations. In this paper, we formalize the behavior of the Hood debugger by extending Sestoft's natural semantics. Moreover, we also indicate how to derive an abstract machine including such debugging information. By doing so, we do not only provide a formal foundation, but we also provide an alternative method to implement debuggers. In fact, we have already implemented a prototype of the abstract machine commented in this paper.