Lambda lifting: transforming programs to recursive equations
Proc. of a conference on Functional programming languages and computer architecture
Deforestation: transforming programs to eliminate trees
Proceedings of the Second European Symposium on Programming
Software design for reliability and reuse: a proof-of-concept demonstration
TRI-Ada '94 Proceedings of the conference on TRI-Ada '94
Substitution: a formal methods case study using monads and transformations
TAPSOFT '93 Selected papers of the colloquium on Formal approaches of software engineering
Lisp and Symbolic Computation
ASTRE: Towards a Fully Automated Program Transformation System
RTA '95 Proceedings of the 6th International Conference on Rewriting Techniques and Applications
Definitional interpreters for higher-order programming languages
ACM '72 Proceedings of the ACM annual conference - Volume 2
Type-driven Defunctionalization
Type-driven Defunctionalization
Defunctionalization of Typed Programs
Defunctionalization of Typed Programs
Functioning without closure: type-safe customized function representations for standard ML
Proceedings of the sixth ACM SIGPLAN international conference on Functional programming
Flow-Directed Closure Conversion for Typed Languages
ESOP '00 Proceedings of the 9th European Symposium on Programming Languages and Systems
Euro-Par '99 Proceedings of the 5th International Euro-Par Conference on Parallel Processing
Comparative Cross-Platform Performance Results from a Parallelizing SML Compiler
IFL '02 Selected Papers from the 13th International Workshop on Implementation of Functional Languages
Proceedings of the 3rd ACM SIGPLAN international conference on Principles and practice of declarative programming
Polymorphic typed defunctionalization
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Parallelization of divide-and-conquer by translation to nested loops
Journal of Functional Programming
From ML to Ada: Strongly-typed language interoperability via source translation
Journal of Functional Programming
A parallel SML compiler based on algorithmic skeletons
Journal of Functional Programming
Polymorphic typed defunctionalization and concretization
Higher-Order and Symbolic Computation
Science of Computer Programming
Losing functions without gaining data: another look at defunctionalisation
Proceedings of the 2nd ACM SIGPLAN symposium on Haskell
PPDP '09 Proceedings of the 11th ACM SIGPLAN conference on Principles and practice of declarative programming
A transformational approach which combines size inference and program optimization
SAIG'01 Proceedings of the 2nd international conference on Semantics, applications, and implementation of program generation
A rational deconstruction of landin's SECD machine
IFL'04 Proceedings of the 16th international conference on Implementation and Application of Functional Languages
Nitpick: a counterexample generator for higher-order logic based on a relational model finder
ITP'10 Proceedings of the First international conference on Interactive Theorem Proving
Hi-index | 0.00 |
In 1972, Reynolds outlined a general method for eliminating functional arguments known as defunctionalization. The idea underlying defunctionalization is encoding a functional value as first-order data, and then realizing the applications of the encoded function via an apply function. Although this process is simple enough, problems arise when defunctionalization is used in a polymorphic language. In such a language, a functional argument of a higher-order function can take different type instances in different applications. As a consequence, its associated apply function can be untypable in the source language. In the paper we present a defunctionalization transformation which preserves typability. Moreover, the transformation imposes no restriction on functional arguments of recursive functions, and it handles functions as results as well as functions encapsulated in constructors. The key to this success is the use of type information in the defunctionalization transformation. Run-time characteristics are preserved by defunctionalization; hence, there is no performance improvement coming from the transformation itself. However closures need not be implemented to compile the transformed program.