The structure of a self-applicable partial evaluator
on Programs as data objects
Two-level semantics and code generation
Theoretical Computer Science - First European Symposium on Programming, Saarbru:9Aicken, W. Germany, March 17:8
Automatic binding time analysis for a typed &lgr;-calculus
Science of Computer Programming
Deforestation: transforming programs to eliminate trees
Proceedings of the Second European Symposium on Programming
Arity raiser and use in program specialization
Proceedings of the third European symposium on programming on ESOP '90
Projection factorisations in partial evaluation
Projection factorisations in partial evaluation
Compiling with continuations
Using Hindley-Milner type inference to optimise list representation
LFP '94 Proceedings of the 1994 ACM conference on LISP and functional programming
An efficient implementation of multiple return values in Scheme
LFP '94 Proceedings of the 1994 ACM conference on LISP and functional programming
LFP '94 Proceedings of the 1994 ACM conference on LISP and functional programming
Type reconstruction for variable-arity procedures
LFP '94 Proceedings of the 1994 ACM conference on LISP and functional programming
Type-directed partial evaluation
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
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
A type-based escape analysis for functional languages
Journal of Functional Programming
Higher-Order and Symbolic Computation
The Correctness of Type Specialisation
ESOP '00 Proceedings of the 9th European Symposium on Programming Languages and Systems
Type Systems for Useless-Variable Elimination
PADO '01 Proceedings of the Second Symposium on Programs as Data Objects
Specification and Correctness of Lambda Lifting
SAIG '00 Proceedings of the International Workshop on Semantics, Applications, and Implementation of Program Generation
Constructed product result analysis for Haskell
Journal of Functional Programming
Specification and correctness of lambda lifting
Journal of Functional Programming
Proceedings of the 2nd ACM SIGPLAN symposium on Haskell
A verified framework for higher-order uncurrying optimizations
Higher-Order and Symbolic Computation
IFL'09 Proceedings of the 21st international conference on Implementation and application of functional languages
Hi-index | 0.00 |
Arity raising, also known as variable splitting or flattening, is the program optimization which transforms a function of one argument into a function of several arguments by decomposing the structure of the original one argument into individual components in that structure. This optimization eliminates the need for the structuring of the components and also allows more arguments to be passed in registers during a function call. We present a formal specification of arity raising for a higher-order functional language. This specification supports the general arity raising of functions, even for functions which are passed as arguments or returned as values. We define a practical algorithm, based on algorithm W, which implements arity raising, and we prove this algorithm sound with respect to the deductive system. These results provide a declarative framework for reasoning about arity raising and support a richer form of the transformation than is currently found in compilers for functional languages.