QuickCheck: a lightweight tool for random testing of Haskell programs
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
Efficiency by Incrementalization: An Introduction
Higher-Order and Symbolic Computation
Adaptive functional programming
POPL '02 Proceedings of the 29th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Monads for incremental computing
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Template meta-programming for Haskell
Proceedings of the 2002 ACM SIGPLAN workshop on Haskell
Functional Incremental Attribute Evaluation
CC '00 Proceedings of the 9th International Conference on Compiler Construction
Stretching the Storage Manager: Weak Pointers and Stable Names in Haskell
IFL '99 Selected Papers from the 11th International Workshop on Implementation of Functional Languages
Upwards and Downwards Accumulations on Trees
Proceedings of the Second International Conference on Mathematics of Program Construction
Journal of Functional Programming
Science of Computer Programming - Special issue on mathematics of program construction (MPC 2002)
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A lightweight approach to datatype-generic rewriting
Proceedings of the ACM SIGPLAN workshop on Generic programming
Generic programming with fixed points for mutually recursive datatypes
Proceedings of the 14th ACM SIGPLAN international conference on Functional programming
Attribute grammars fly first-class: how to do aspect oriented programming in Haskell
Proceedings of the 14th ACM SIGPLAN international conference on Functional programming
Lazy functional incremental parsing
Proceedings of the 2nd ACM SIGPLAN symposium on Haskell
Type-changing rewriting and semantics-preserving transformation
Proceedings of the ACM SIGPLAN 2014 Workshop on Partial Evaluation and Program Manipulation
Hi-index | 0.00 |
Programs in languages such as Haskell are often datatypecentric and make extensive use of folds on that datatype. Incrementalization of such a program can significantly improve its performance by transforming monolithic atomic folds into incremental computations. Functional incrementalization separates the recursion from the application of the algebra in order to reduce redundant computations and reuse intermediate results. In this paper, we motivate incrementalization with a simple example and present a library for transforming programs using upwards, downwards, and circular incrementalization. Our benchmarks show that incrementalized computations using the library are nearly as fast as handwritten atomic functions.