Functional Reactive Programming can model this sort of &#39;change over time&#39; incremental computation, but I doubt you&#39;d get a performance benefit from it unless your operations are considerably more expensive than &#39;+&#39; on numbers. Look into the &#39;Reactive&#39; library, and Conal Elliott&#39;s paper on it (Push-Pull FRP).<div>
<div><div><br></div><div><div><div><div><div class="gmail_quote">On Thu, Oct 6, 2011 at 2:55 PM, Benjamin Redelings I <span dir="ltr">&lt;<a href="mailto:benjamin.redelings@duke.edu">benjamin.redelings@duke.edu</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Hi all,<br>
<br>
    I&#39;m not sure this is the right forum for this question.  If so,<br>
please let me know where else might be more appropriate.  My question<br>
is, roughly, is there already an existing framework for incremental<br>
evaluation in Haskell?  That is, if I write a program using Haskell, and<br>
then change a small part of this program, can the modified program<br>
re-use any results which are calculated by the first, unmodified<br>
program?  This would be really useful for CPU-intensive statistical<br>
software and other scientific computing.<br>
<br>
    For example, if I have the expression (x+y)+z, where x=1, y=2, and<br>
z=4, then I need not recalculate (x+y) when z changes.  However, (x+y)+z<br>
must still be recalculated.  This is useful in speeding up statistical<br>
software that optimizes a complex function of many arguments, when only<br>
one argument changes at a time.  It is also useful for Markov chain<br>
Monte Carlo (MCMC) since usually one changes only one argument at a time<br>
there as well.<br>
<br>
    I haven&#39;t seen much work on this using the lambda calculus for this<br>
since JH Field&#39;s Ph.D. Thesis &quot;Incremental Reduction in the Lambda<br>
Calculus&quot;.  There are a number of programs that represent the<br>
calculation as a static DAG (directed, acyclic graph), but this can&#39;t<br>
handle functions very well.  I&#39;m currently trying to write an<br>
interpreter that could do this correctly, but I don&#39;t want to reinvent<br>
the wheel.  Can anyone point me to where I could find more information<br>
about how to do this in a Haskell framework?<br>
<br>
thanks!<br>
-BenRI<br><font color="#888888">
--<br>
Benjamin Redelings<br>
<br>
<br>
______________________________<u></u>_________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/<u></u>mailman/listinfo/haskell-cafe</a><br>
</font></blockquote></div><br></div></div></div></div></div></div>