Programming Languages

Presentation at Workshop on Generic Programming

Tillmann Rendel
Alumni
Tillmann Rendel
presents an invited talk at the Workshop on Generic Programming (WGP) in Vancouver, British Columbia. The talk is based on work with Jonathan Brachthäuser
Alumni
Jonathan Brachthäuser
, Julia Trieflinger
Alumni
Julia Trieflinger
, Paolo Giarrusso
Alumni
Paolo Giarrusso
, and Klaus Ostermann
Head
Klaus Ostermann
.

Contents

The main part of the talk presents three ideas related to the expression problem.

  1. It turns out that we can use defunctionalization and refunctionalization to convert between shallow and deep embedding of a DSL, and between a datatype with a fold function and the final embedding of that datatype.

  2. We need to go beyond the two dimensions of modularity described by the expression problem to scale to large software systems, allowing components with internal structure and dependencies. (Based on our modular, linear and compositional encoding of attribute grammars as object algebras in Scala, see algebra composition project and OOPSLA 2014 paper).

  3. Should it be possible to dualize the expression problem (about open data types) to the co-expression problem (about open codata types)?

The talk ends with a short overview of our recent work on a language with symmetric support for programming with data and codata (see Uroboro project and ICFP 2015 paper, which was partly motivated by the three ideas presented in the main part of the talk.

Further Information

Publications

From Object Algebras to Attribute Grammars

by Tillmann Rendel, Jonathan Brachthäuser, and Klaus Ostermann

In Proceedings of the 2014 ACM International Conference on Object Oriented Programming Systems Languages & Applications (OOPSLA), pages 377–395. ACM Press, 2014.

Learn More

Automatic Refunctionalization to a Language with Copattern Matching: With Applications to the Expression Problem

by Tillmann Rendel, Julia Trieflinger, and Klaus Ostermann

In Proceedings of International Conference on Functional Programming, pages 269–279. ACM, 2015.

Learn More