Modular programming is a practical solution for separation of concerns but the support for modularity provided by programming languages does not resolve the classic expression problem and more generally the tyranny of the dominant decomposition: evolutions are modular only on the principal axis of decomposition. To solve this problem, a practical solution would be to be able to choose the architecture of an application each time one has to make it evolve. We provide a prototype tool for the Haskell language to support that. Our tool allows to build transformations to switch Haskell programs from one structure to another. We do this by driving a refactoring tool for Haskell (HaRe): transformations are built by chaining elementary operations of refactoring. Since each elementary refactoring operation preserve the semantics, the whole transformations also do.
[1]
D. L. Parnas,et al.
On the criteria to be used in decomposing systems into modules
,
1972,
Software Pioneers.
[2]
Stanley M. Sutton,et al.
N degrees of separation: multi-dimensional separation of concerns
,
1999,
Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).
[3]
Günter Kniesel,et al.
Static composition of refactorings
,
2004,
Sci. Comput. Program..
[4]
Andrew P. Black,et al.
The Case for Multiple Views
,
2004,
ICSE 2004.
[5]
Huiqing Li,et al.
Tool support for refactoring functional programs
,
2003,
PEPM '08.
[6]
Julien Cohen,et al.
Views, Program Transformations, and the Evolutivity Problem in a Functional Language
,
2010
.