I'm working my way through both papers now (arrows, and deterministic
error-correcting parsers). They're very interesting.
I wanted to point out that I see a similarity to work being done in the C++
community with "template metaprograms" and "active libraries", where some
library developers (typically for numerical "codes") are exploring the outer
limits of the C++ template facility in order to build libraries that
"self-configure" at compile time to produce optimized code depending on both
context and platform. So the library developer produces code that sort of
does an application specific 'static analysis' at compile time that changes
the algorithms and/or data structures that the library supplies to the
calling program depending on the context at the call site. Two of the more
active investigation/development efforts in this line are Blitz++ and Pooma
(see links below).
It turns out that this method is pretty tricky for the library writer but
easy to use for the library user - seems like the arrows technique would be
similar. But that could be acceptable - there's no reason a 'general'
functional programmer needs to write code that does a static analysis of his
program in order to get better performance - that's probably properly the
domain of the compiler writer and library writer. (I guess what this kind
of work does is it allows the library writer to contribute optimizations in
this way, previously only the compiler writer got to.)
Also, C++ template metaprogramming tends to break existing C++ compilers or
expose grievous performance problems in the compiler (that more 'normal' C++
coding style don't) - it will be interesting to see if arrows do the same
for functional compilers!
Some links:
Blitz++ web page: http://seurat.uwaterloo.ca/blitz/
PoomaII distribution: http://www.acl.lanl.gov/pooma/
Generative Matrix Computation Library:
http://nero.prakinf.tu-ilmenau.de/~czarn/gmcl/
Paper on 'active libraries':
http://extreme.indiana.edu/~tveldhui/papers/oo98.html
-- Dave