Scrap your boilerplate: a practical design pattern for generic programming

  • Authors:
  • Ralf Lämmel;Simon Peyton Jones

  • Affiliations:
  • Vrije Universiteit, Amsterdam;Microsoft Research, Cambridge, MA

  • Venue:
  • Proceedings of the 2003 ACM SIGPLAN international workshop on Types in languages design and implementation
  • Year:
  • 2003

Quantified Score

Hi-index 0.01

Visualization

Abstract

We describe a design pattern for writing programs that traverse data structures built from rich mutually-recursive data types. Such programs often have a great deal of "boilerplate" code that simply walks the structure, hiding a small amount of "real" code that constitutes the reason for the traversal.Our technique allows most of this boilerplate to be written once and for all, or even generated mechanically, leaving the programmer free to concentrate on the important part of the algorithm. These generic programs are much more adaptive when faced with data structure evolution because they contain many fewer lines of type-specific code.Our approach is simple to understand, reasonably efficient, and it handles all the data types found in conventional functional programming languages. It makes essential use of rank-2 polymorphism, an extension found in some implementations of Haskell. Further it relies on a simple type-safe cast operator.