Abstract
Defining functions by pattern matching over the arguments is advantageous for understanding and reasoning, but it tends to expose the implementation of a datatype. Significant effort has been invested in tackling this loss of modularity; however, decoupling patterns from concrete representations while maintaining soundness of reasoning has been a challenge. Inspired by the development of invertible programming, we propose an approach to program refactoring based on a right-invertible language rinv—every function has a right (or pre-) inverse. We show how this new design is able to permit a smooth incremental transition from programs with algebraic datatypes and pattern matching, to ones with proper encapsulation, while maintaining simple and sound reasoning.
Original language | English |
---|---|
Journal | Science of Computer Programming |
Volume | 78 |
Issue number | 11 |
DOIs | |
Publication status | Published - 2012 |
Research Groups and Themes
- Programming Languages
Keywords
- Functional programming
- Refactoring
- Pattern matching
- Invertible programming
- Abstract datatypes
- Fusion