<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Message: 3<br>
Date: Thu, 11 Nov 2010 18:56:00 +0100<br>
From: Sjoerd Visscher &lt;<a href="mailto:sjoerd@w3future.com">sjoerd@w3future.com</a>&gt;<br>
<br>
On Nov 11, 2010, at 6:34 PM, John Lato wrote:<br>
<br>
&gt; I don&#39;t know to what extent it would apply in this hypothetical situation, but ghc (and probably other compilers) rely upon Haskell&#39;s semantics in performing various code transformations.  If you break the semantics some transformations become invalid, resulting in incorrect code.<br>

&gt;<br>
&gt; I&#39;ve experienced this with code that violated ref. transparency.  The program behavior changed depending on the compiler&#39;s optimization settings.  I&#39;m not keen to go back to that.<br>
<br>
Then don&#39;t do that. Being able to serialize functions is just as dangerous as having unsafePerformIO. If you don&#39;t use it, you don&#39;t have problems.<br></blockquote><div><br></div><div>If you do use &quot;serialize&quot;, I think it would cause problems most of the time.  A pure serialization would violate referential transparency.  GHC relies upon referential transparency for some transformations to be valid.  Therefore it&#39;s not possible to use a pure serialization function safely unless the user can guarantee that it&#39;s only used in a referentially transparent manner, which is an extremely high barrier IMO (higher than for unsafePerformIO).</div>
<div><br></div><div>John</div></div>