Refactoring Pattern Matching
Artikel i vetenskaplig tidskrift, 2013
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.