<br><br><div><span class="gmail_quote">On 5/16/07, <b class="gmail_sendername">Joe Marshall</b> &lt;<a href="mailto:jmarshall@alum.mit.edu">jmarshall@alum.mit.edu</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
&gt; I want to disagree with part of this.<br><br>&gt; Enterprise projects accumulate data, move it around, grovel through it<br>&gt; (mining), analyze it, and report on it.&nbsp;&nbsp;All other things considered<br>&gt; equal, enterprises would rather *not* modify data, but instead
<br>&gt; supersede it and archive the old.</blockquote><div><br>This is true with where I&#39;ve been to - but I would just add (as you state below, non consciously) that conceptually IT/business think of keeping audit trails rather than *not* modifying data, and most of the techniques I&#39;ve seen applied are all stateful, whereas you describe below it can be stateless. 
<br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">&gt; So where does the functional programming come in?&nbsp;&nbsp;If you have no<br>&gt; primitives that can modify the data, it is *trivial* to avoid all the
<br>&gt; problems associated with mutation.&nbsp;&nbsp;(There is the problem of<br>&gt; non-determinism that shows up.)<br><br>&gt; I was involved in a company developing enterprise-level<br>&gt; change-management software.&nbsp;&nbsp;We used a model where the changes were
<br>&gt; immutable and composable (like deltas).&nbsp;&nbsp;We *never* deleted or<br>&gt; modified a change, we just accumulated more and more of them.&nbsp;&nbsp;The<br>&gt; code was naturally `macro-functional&#39; in that all large-scale<br>
&gt; operations were strictly functional.&nbsp;&nbsp;(At a small scale there were<br>&gt; bits of mutation here and there, but that was for efficiency).&nbsp;&nbsp;It<br>&gt; became clear to me that functional programming provides enormous<br>
&gt; advantages for this project because as complex as things got, you<br>&gt; could be pretty sure that the data was safe and secure.</blockquote><div><br>Thanks for sharing - appreciated ;)<br><br>After some more digging - it seems that keeping deltas is one of the steps to make a system functional :) 
<br><br>If you are in a position to share, I am wondering - did you do pure FP style from top to bottom stack? &nbsp; Or you use traditional stateful technique for GUI/persistence and use FP in the middle tier?&nbsp; <br><br>Thanks,
<br>yinso <br></div><br></div>