Lambda lifting: transforming programs to recursive equations
Proc. of a conference on Functional programming languages and computer architecture
The concept of a supercompiler
ACM Transactions on Programming Languages and Systems (TOPLAS) - The MIT Press scientific computation series
A novel representation of lists and its application to the function "reverse"
Information Processing Letters
How to make ad-hoc polymorphism less ad hoc
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Firstification
Partial evaluation and automatic program generation
Partial evaluation and automatic program generation
Lisp and Symbolic Computation
Type-driven defunctionalization
ICFP '97 Proceedings of the second ACM SIGPLAN international conference on Functional programming
Term rewriting and all that
The Definition of Standard ML
Deforestation: Transforming Programs to Eliminate Trees
ESOP '88 Proceedings of the 2nd European Symposium on Programming
The GRIN Project: A Highly Optimising Back End for Lazy Functional Languages
IFL '96 Selected Papers from the 8th International Workshop on Implementation of Functional Languages
Proceedings of the 3rd ACM SIGPLAN international conference on Principles and practice of declarative programming
Definitional interpreters for higher-order programming languages
ACM '72 Proceedings of the ACM annual conference - Volume 2
Polymorphic typed defunctionalization
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Secrets of the Glasgow Haskell Compiler inliner
Journal of Functional Programming
Termination analysis and call graph construction for higher-order functional programs
ICFP '07 Proceedings of the 12th ACM SIGPLAN international conference on Functional programming
Stream fusion: from lists to streams to nothing at all
ICFP '07 Proceedings of the 12th ACM SIGPLAN international conference on Functional programming
Call-pattern specialisation for Haskell programs
ICFP '07 Proceedings of the 12th ACM SIGPLAN international conference on Functional programming
Not all patterns, but enough: an automatic verifier for partial but sufficient pattern matching
Proceedings of the first ACM SIGPLAN symposium on Haskell
Positive supercompilation for a higher order call-by-value language
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Dependently typed programming in Agda
AFP'08 Proceedings of the 6th international conference on Advanced functional programming
AProVE 1.2: automatic termination proofs in the dependency pair framework
IJCAR'06 Proceedings of the Third international joint conference on Automated Reasoning
Hi-index | 0.00 |
We describe a transformation which takes a higher-order program, and produces an equivalent first-order program. Unlike Reynolds-style defunctionalisation, it does not introduce any new data types, and the results are more amenable to subsequent analysis operations. We can use our method to improve the results of existing analysis operations, including strictness analysis, pattern-match safety and termination checking. Our transformation is implemented, and works on a Core language to which Haskell programs can be reduced. Our method cannot always succeed in removing all functional values, but in practice is remarkably successful.