|
ABSTRACT
Refactorings are source-to-source program transformations which change program structure and organisation, but not program functionality. Documented in catalogues and supported by tools, refactoring provides the means to adapt and improve the design of existing code, and has thus enabled the trend towards modern agile software development processes. Refactoring has taken a prominent place in software development and maintenance, but most of this recent success has taken place in the OO and XP communities.In our project, we explore the prospects for 'Refactoring Functional Programs', taking Haskell as a concrete case-study. This paper discusses the variety of pragmatic and implementation issues raised by our work on the Haskell Refactorer. We briefly introduce the ideas behind refactoring, and a set of elementary functional refactorings. The core of the paper then outlines the main challenges that arise from our aim to produce practical tools for a decidedly non-toy language, summarizes our experience in trying to establish the necessary meta-programming infrastructure and gives an implementation overview of our current prototype refactoring tool. Using Haskell as our implementation language, we also offer some preliminary comments on Haskell programming-in-the-large.
REFERENCES
Note: OCR errors may be found in this Reference List extracted from the full text article. ACM has opted to expose the complete List rather than only correct and linked references.
 |
1
|
|
| |
2
|
|
 |
3
|
|
| |
4
|
C. Reinke (ed.). Haskell Communities and Activities Report. http://haskell.org/communities/, May 2003.
|
 |
5
|
|
 |
6
|
|
| |
7
|
|
 |
8
|
|
| |
9
|
William G. Griswold. Program restructuring to aid software maintenance. PhD thesis, Univ. of Washington, Dept. of CS and Engineering, 1991. Tech. Rep. No. 91-08-04.
|
| |
10
|
W. Guttmann, H. Partsch, W. Schulte, and T. Vullinghs. Tool Support for the Interactive Derivation of Formally Correct Functional Programs, Ext. Abstr. In FM-TOOLS, July 2002. http://www.informatik.uni-ulm.de/pm/ultra/.
|
| |
11
|
T. Hallgren. A Lexer for Haskell in Haskell. http://www.cse.ogi.edu/~hallgren/Talks/LHiH/2002-01-14.html.
|
 |
12
|
|
| |
13
|
Mark P. Jones. Typing Haskell in Haskell. http://www.cse.ogi.edu/~mpj/thih/, November 2000.
|
| |
14
|
Jan Kort and Ralf Lammel. A Framework for Datatype Transformation. In Proc. of Language, Descriptions, Tools, and Applications (LDTA 2003). Elsevier, April 2003.
|
| |
15
|
|
 |
16
|
|
 |
17
|
|
| |
18
|
R. Lammel and J. Visser. Generic Programming with Strafunski. http://www.cs.vu.nl/Strafunski/, 2001.
|
 |
19
|
|
| |
20
|
|
| |
21
|
R. Lammel, J. Visser, and J. Kort. Dealing with Large Bananas. In J. Jeuring, editor, Proceedings of WGP'2000, Tech. Report, Universiteit Utrecht, pages 46--59, July 2000.
|
| |
22
|
Simon Marlow. Haddock: A Haskell Documentation Tool. http://www.haskell.org/haddock/.
|
| |
23
|
|
 |
24
|
|
| |
25
|
|
| |
26
|
Donald Bradley Roberts. Practical Analysis for Refactoring. PhD thesis, Univ. of Illinois at Urbana Champaign, 1999.
|
| |
27
|
Chris Ryder. The Medina metrics library for Haskell. http://www.cs.kent.ac.uk/~cr24/medina/, 2002.
|
 |
28
|
|
| |
29
|
R. D. Tennent. Language Design Methods Based on Semantic Principles. Acta Informatica, 8:97--112, 1977.
|
| |
30
|
|
| |
31
|
Eelco Visser. Stratego -- Strategies for Program Transformation. http://www.stratego-language.org/.
|
 |
32
|
Eelco Visser , Zine-el-Abidine Benaissa , Andrew Tolmach, Building program optimizers with rewriting strategies, Proceedings of the third ACM SIGPLAN international conference on Functional programming, p.13-26, September 26-29, 1998, Baltimore, Maryland, United States
|
CITED BY 6
|
|
Alain Coutu , Catharina Serino , Suzanne Smith , Sara Stoecklin, A framework for an adaptive refactoring tool, Proceedings of the 7th WSEAS International Conference on Automation & Information, p.138-143, June 13-15, 2006, Cavtat, Croatia
|
|
|
|
|
|
|
|
|
|
|
|
|
Paul Hudak , John Hughes , Simon Peyton Jones , Philip Wadler, A history of Haskell: being lazy with class, Proceedings of the third ACM SIGPLAN conference on History of programming languages, p.12-1-12-55, June 09-10, 2007, San Diego, California
|
|