Wadler's deforestation algorithm eliminates intermediate data structures from functional programs. To be suitable for inclusion in a compiler, deforestation must terminate on all programs. Several techniques exist to ensure termination of deforestation on all first-order programs, but general techniques for higher-order programs were introduced only recently by first Hamilton and then Marlow. We present a new technique for ensuring termination of deforestation on all higher-order programs that allows useful transformation steps prohibited in Hamilton 's and Marlow's techniques. The technique uses a constraint-based higher-order control-flow analysis. We also relate our technique to previous approaches to termination of first- and higher-order deforestation in some detail. 1
|
801
|
A theory of type polymorphism in programming
– Milner
- 1978
|
|
529
|
A transformation system for developing recursive programs
– Burstall, Darlington
- 1977
|
|
444
|
Lambda calculi with types
– Barendregt
- 1991
|
|
246
|
Why Functional Programming Matters
– Hughes
- 1989
|
|
179
|
A short cut to deforestation
– Gill, Launchbury, et al.
- 1993
|
|
155
|
The call-by-need lambda calculus
– Ariola, Felleisen, et al.
- 1995
|
|
127
|
Type inference with polymorphic recursion
– Henglein
- 1993
|
|
117
|
Set-based analysis of ML programs
– Heintze
- 1994
|
|
86
|
The principal type scheme of an object in combinatory logic. Transactions of theAmerican Mathematical Society
– Hindley
- 1969
|
|
84
|
Warm fusion: deriving build-catas from recursive definitions
– Launchbury, Sheard
- 1995
|
|
81
|
Polymorphic Type Schemes and Recursive Definitions
– Mycroft
- 1984
|
|
71
|
Using circular programs to eliminate multiple traversals of data
– Bird
- 1984
|
|
67
|
Safe fusion of functional expressions
– Chin
|
|
50
|
Self-Applicable Partial Evaluation
– Bondorf
- 1990
|
|
49
|
Cheap deforestation for non-strict functional languages
– Gill
- 1996
|
|
49
|
Global Control for Partial Deduction through Characteristic Atoms and Global Trees
– Leuschel, Martens
- 1996
|
|
44
|
A system for assisting program transformation
– Feather
- 1982
|
|
40
|
Automatic Methods for Program Transformation
– Chin
- 1990
|
|
40
|
Finiteness analysis
– Holst
- 1991
|
|
38
|
Safe Fusion of Functional Expressions II: Further Improvements
– Chin
- 1994
|
|
33
|
An experimental program transformation and synthesis system
– Darlington
- 1981
|
|
31
|
Improving Programs which Recurse over Multiple Inductive Structures
– Fegaras, Sheard, et al.
- 1994
|
|
29
|
Synthesis: Dreams => Programs
– Manna, Waldinger
- 1979
|
|
27
|
When will Deforestation Stop
– Ferguson, Wadler
- 1988
|
|
15
|
Higher order deforestation
– Hamilton
|
|
13
|
Extending deforestation for first order functional programs
– Hamilton, Jones
- 1991
|
|
9
|
Fully lazy higher-order removal
– Chin
- 1992
|
|
9
|
Deforestation for higher-order functions
– Marlow, Wadler
- 1992
|
|
6
|
Better consumers for deforestation
– Chin, Khoo
- 1995
|
|
6
|
Cheap deforestation in practice: An optimiser for Haskell
– Gill, Jones
|
|
5
|
Higher-order removal transformation technique for functional programs
– Chin, Darlington
- 1992
|
|
5
|
Deforestation for Higher-Order Functional Languages
– Marlow
- 1996
|
|
4
|
Generalising deforestation to all first-order functional programs
– Chin
- 1991
|
|
4
|
Compile-Time Optimisations of Storage Usage in Lazy Functional Programs
– Hamilton
- 1993
|
|
4
|
Transforming programs to eliminate intermediate structures
– Hamilton, Jones
- 1991
|
|
3
|
Extending first order deforestation
– Hamilton
- 1995
|
|
3
|
Transformations of FP program schemes
– Kierburtz, Schultis
- 1981
|
|
1
|
Automatic autoprojection of recursive equations
– Bondorf
- 1991
|