Abstract
Traditional functional languages do not have an explicit distinction between binding times. It arises implicitly, however, as typically one instantiates a higher-order function with the known arguments whereas the unknown arguments still are to be taken as parameters. The distinction between 'known' and 'unknown' is closely related to the distinction between binding times, e.g. the distinction between compile-time and run-time. We shall therefore use a combination of polymorphic type inference and binding time analysis to obtain the required information. Following the current trend in the implementation of functional languages we shall then transform the run-time level (not the compile-time level) of the program into categorical combinators. At this stage we have a natural distinction between two kinds of program transformations: partial evaluation which involves the compile-time level of our notation and algebraic transformations (i.e. the application of algebraic laws) which involves the run-time level of our notation. By reinterpreting the combinators in suitable ways we obtain specifications of abstract interpretations (or data flow analyses). In particular, the use of combinators makes it possible to use a general framework for specifying both forward and backward analyses. The results of these analyses will be used to enable program transformations that are not applicable under all circumstances.
Cite
CITATION STYLE
Nielson, H. R., & Nielson, F. (1989). Transformations on higher-order functions. In Proceedings of the 4th International Conference on Functional Programming Languages and Computer Architecture, FPCA 1989 (pp. 129–143). Association for Computing Machinery, Inc. https://doi.org/10.1145/99370.99380
Register to see more suggestions
Mendeley helps you to discover research relevant for your work.