Incremental Spreadsheet Interpreter
One of my major research interest subjects is Adaptive and Incremental computation.
An adaptive computation maintains the relationship between its input
and output as the input changes.
That is to say that output will be updated
as response to input changes, while re-evaluation will only occur on
program portions afected by the change. Adaptive programming is most
useful in situations where input changes lead to relatively small changes in
the output.
In limiting cases one cannot avoid a complete re-computation
of the output, but in many cases the results of the previous computation
may be re-used to obtain the updated output more quickly than a complete
re-evaluation.
We are using Magnus Carlsson Adaptive Combinators library to model,
in Haskell, a real spreadsheet adaptive system. This is, in fact, one of the
classical incremental computation problems.
Magnus Carlsson's Haskell library for incremental computing, by its hand,
follows closely the implementation in the POPL 2002 paper "Adaptive
Functional Programming", by Umut Acar, Guy Blelloch and Bob Harper.
For detailed information on the building of the Incremental Interpreter,
please take a look at this brief documentation report.
If you want to actually run the interpreter, you will need this (non-hierarchical)
small library, plus Language.Gnumeric UMinho Haskell library, HaXml
and Magnus Carlsson Haskell library.