[Haskell-cafe] Literate refactoring?

Jacques Carette carette at mcmaster.ca
Thu Nov 19 13:09:05 EST 2009


I'd like to ask the cafe's advice on how to 'do this right'.

The situation is that we've got 2 literate Haskell programs which we 
would like to refactor.  In fact, this refactoring will ultimately unify 
these 2 separate programs into a single framework.  Every refactoring 
step is well-defined and induces a discrete modification.  These 
programs also come with tests of their own, which we would like to 
refactor along with the code.

In the end, we would like to obtain:
1. For each discrete step, full working programs, with tests and 
literate comments
2. A technical report which describes all the steps from #1 above, as a 
literate Haskell document.

For the TechReport, we don't need to be able to extract working code 
from it, but the code which is in it should be chunks of the working 
programs, not 'independent'.  Especially as some of the 'discrete steps' 
will result in dead ends, which we want to document, but not otherwise 
pursue.  In other words, the set of "discrete programs" do not form a 
total linear order, but is more like a linear order with a few short 
branches hanging off of it.

We were thinking that using some combination of scripts, 'patches', 
features from subversion and literate Haskell documents should allow us 
to do this.  In an ideal world, it would be nice if what we stored was 
only (generalized) patches, and we could generate #1 and #2 above from 
that.  [These patches would be generalized because they would contain 
descriptions of what the patch is about, as well as actual patches; 
though perhaps that description is really just a patch to the 
TechReport, we're not sure]. 

We were able to envision a number of different partial solutions, but 
somehow none of them 'came together' well enough to feel satisfactory.  
Instead of biasing the cafe's thinking by laying those pieces out, I 
figured I would lay out the high-level requirements, and let creative 
solutions come in.

Jacques


More information about the Haskell-Cafe mailing list