English

Continuation-Passing Style, Defunctionalization, Accumulations, and Associativity

Programming Languages 2021-11-23 v1

Abstract

Context: Reynolds showed us how to use continuation-passing style and defunctionalization to transform a recursive interpreter for a language into an abstract machine for programs in that language. The same techniques explain other programming tricks, including zippers and accumulating parameters. Inquiry: Buried within all those applications there is usually a hidden appeal to the algebraic property of associativity. Approach: Our purpose in this paper is to entice associativity out of the shadows and into the limelight. Knowledge: We revisit some well-known applications (factorial, fast reverse, tree flattening, and a compiler for a simple expression language) to spotlight their dependence on associativity. Grounding: We replay developments of these programs through a series of program transformations and data refinements, justified by equational reasoning. Importance: Understanding the crucial role played by associativity clarifies when continuation-passing style and defunctionalization can help and when they cannot, and may prompt other applications of these techniques.

Keywords

Cite

@article{arxiv.2111.10413,
  title  = {Continuation-Passing Style, Defunctionalization, Accumulations, and Associativity},
  author = {Jeremy Gibbons},
  journal= {arXiv preprint arXiv:2111.10413},
  year   = {2021}
}
R2 v1 2026-06-24T07:45:22.690Z