<div class="gmail_quote">On Sun, Dec 13, 2009 at 12:21 PM, Brent Yorgey <span dir="ltr">&lt;<a href="mailto:byorgey@seas.upenn.edu">byorgey@seas.upenn.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im">On Sun, Dec 13, 2009 at 11:24:06AM +0100, Heinrich Apfelmus wrote:<br>
&gt;<br>
&gt; In other words, the book in your example is not a real book, it&#39;s just a<br>
&gt; few bytes in the computer that model it for the purpose of tracking<br>
&gt; whether it&#39;s lent out or not. For instance, these few bytes can be a<br>
&gt; unique ID and a possible  lend  function is<br>
&gt;<br>
&gt;     lend :: BookID -&gt; Library -&gt; Library<br>
<br>
</div>I should also point out that people coming from an OO or imperative<br>
background often look at a function like this and think it looks<br>
incredibly inefficient --- why throw away the entire *library* and<br>
build a new one *from scratch* when all we want to do is modify one<br>
little part of it?  This seems a huge price to pay for immutability!<br>
<br>
But this line of thinking confuses abstract semantics with concrete<br>
implementation (something that imperative programming unfortunately<br>
tends to encourage, in my experience).  The runtime is free to<br>
implement operations like &quot;lend&quot; any way it likes, as long as the<br>
abstract semantics are preserved.<br></blockquote></div>+1<br><br>One of the turning points in learning the FP way is the realization that the conception of &quot;function&quot; as a &quot;machine&quot; or &quot;transformation process&quot; is misleading or even harmful.  For most programmers coming from an imperative language background that&#39;s going to mean returning to a more mathematically pure notion of function, which means discarding the idea of mutating parts of an object in favor of establishing relations among different &quot;objects&quot; and letting the compiler worry about the gory details.  Youschkevitch&#39;s fascinating <a href="http://www.springerlink.com/content/p3x21230u404p13h/">history of the concept</a> might be useful.<br>
<br>-gregg<br>