Title
Decomposition diversity with symmetric data and codata
Abstract
The expression problem describes a fundamental trade-off in program design: Should a program's primary decomposition be determined by the way its domain objects are constructed ("functional" decomposition), or by the way they are destructed ("object-oriented" decomposition)? We argue that programming languages should not force one of these decompositions on the programmer; rather, a programming language should support both ways of decomposing a program in a symmetric way, with an easy translation between these decompositions. However, current programming languages are usually not symmetric and hence make it unnecessarily hard to switch the decomposition. We propose a language that is symmetric in this regard and allows a fully automatic translation between "functional" and "object-oriented" decomposition. We present a language with algebraic data types and pattern matching for "functional" decomposition and codata types and copattern matching for "object-oriented" decomposition, together with a bijective translation that turns a data type into a codata type ("destructorization") or vice versa ("constructorization"). We present the first symmetric programming language with support for local (co)pattern matching, which includes local anonymous function or object definitions, that allows an automatic translation as described above. We also present the first mechanical formalization of such a language and prove i) that the type system is sound, that the translations between data and codata types are ii) type-preserving, iii) behavior-preserving and iv) inverses of each other. We also extract a mechanically verified implementation from our formalization and have implemented an IDE with direct support for these translations.
Year
DOI
Venue
2020
10.1145/3371098
Proceedings of the ACM on Programming Languages
Keywords
Field
DocType
Codata, Defunctionalization, Refunctionalization, Types
Programming language,Programmer,Computer science,Primary decomposition,Theoretical computer science,Program Design Language,Decomposition
Journal
Volume
Issue
Citations 
4
POPL
0
PageRank 
References 
Authors
0.34
0
4
Name
Order
Citations
PageRank
David Binder100.68
Julian Jabs200.68
Ingo Skupin300.68
Klaus Ostermann445723.97