Lambda lifting: transforming programs to recursive equations
Proc. of a conference on Functional programming languages and computer architecture
Elf: a language for logic definition and verified metaprogramming
Proceedings of the Fourth Annual Symposium on Logic in computer science
Partial type inference for untyped functional programs
LFP '90 Proceedings of the 1990 ACM conference on LISP and functional programming
Control-flow analysis of higher-order languages of taming lambda
Control-flow analysis of higher-order languages of taming lambda
Compiling with continuations
A framework for defining logics
Journal of the ACM (JACM)
Set based program analysis
Implementation of the typed call-by-value λ-calculus using a stack of regions
POPL '94 Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
TIL: a type-directed optimizing compiler for ML
PLDI '96 Proceedings of the ACM SIGPLAN 1996 conference on Programming language design and implementation
Let-floating: moving bindings to give faster programs
Proceedings of the first ACM SIGPLAN international conference on Functional programming
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Lightweight closure conversion
ACM Transactions on Programming Languages and Systems (TOPLAS)
POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
Lambda-dropping: transforming recursive equations into programs with block structure
Theoretical Computer Science - Partial evaluation and semantics-based program manipulation
Natural Semantics and Some of Its Meta-Theory in Elf
ELP '99 Proceedings of the Second International Workshop on Extensions of Logic Programming
Rank 2 Type Systems and Recursive Definitions
Rank 2 Type Systems and Recursive Definitions
A type-based escape analysis for functional languages
Journal of Functional Programming
Specification and correctness of lambda lifting
Journal of Functional Programming
CPS transformation of beta-redexes
Information Processing Letters
Proceedings of the 2nd ACM SIGPLAN symposium on Haskell
CPS transformation of beta-redexes
Information Processing Letters
A verified framework for higher-order uncurrying optimizations
Higher-Order and Symbolic Computation
Hi-index | 0.00 |
We present a formal specification of unCurrying for a higher-order, functional language with ML-style let-polymorphism. This specification supports the general unCurrying of functions, even for functions that are passed as arguments or returned as values. The specification also supports partial unCurrying of any consecutive parameters of a function, rather than only unCurrying all of a function's parameters. We present the specification as a deductive system that axiomatizes a judgment relating a source term with an unCurried form of the term. We prove that this system relates only typable terms and that it is correct with respect to an operational semantics. We define a practical algorithm, based on algorithm {\cal W}, that implements unCurrying and prove this algorithm sound and complete with respect to the deductive system. This algorithm generates maximally unCurried forms of source terms. These results provide a declarative framework for reasoning about unCurrying and support a richer form of unCurrying than is currently found in compilers for functional languages.