<p>My understanding was that the reason is that CSE can cause things to be shared that take up a lot of space when normally they would be garbage collected sooner.</p>
<div class="gmail_quote">On Feb 18, 2012 11:57 AM, &quot;Roman Cheplyaka&quot; &lt;<a href="mailto:roma@ro-che.info">roma@ro-che.info</a>&gt; wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
It doesn&#39;t matter. Laziness would be affected if, for instance,<br>
something is not evaluated without CSE and is evaluated with it.<br>
<br>
In your example either all or none of &#39;a&#39; and &#39;b&#39; get evaluated,<br>
depending on whether the top-level expression is evaluated.<br>
<br>
* Victor Gorokgov &lt;<a href="mailto:me@rkit.pp.ru">me@rkit.pp.ru</a>&gt; [2012-02-18 18:23:19+0400]<br>
&gt; example = a + b + a + b<br>
&gt;<br>
&gt; exampleCSE = x + x<br>
&gt;   where x = a + b<br>
&gt;<br>
&gt; With CSE we are introducing new thunk: x.<br>
&gt;<br>
&gt; 18.02.2012 17:38, Roman Cheplyaka пишет:<br>
&gt; &gt;* Holger Siegel&lt;<a href="mailto:holgersiegel74@yahoo.de">holgersiegel74@yahoo.de</a>&gt;  [2012-02-18 12:52:08+0100]<br>
&gt; &gt;&gt;You cannot. Common subexpression elimination is done by GHC very<br>
&gt; &gt;&gt;conservatively, because it can not only affect impure programs: it can<br>
&gt; &gt;&gt;also affects strictness/lazyness and worsen memory usage of pure code.<br>
&gt; &gt;&gt;Like the HaskellWiki says: &quot;If you care about CSE, do it by hand.&quot;<br>
&gt; &gt;How can it affect strictness or laziness?<br>
<br>
--<br>
Roman I. Cheplyaka :: <a href="http://ro-che.info/" target="_blank">http://ro-che.info/</a><br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div>