<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p>all (== test_lcv) [init_lcv, update_lcv, update_lcv&#39;]&quot;</p>
<p>Wouldn&#39;t this be be better as tuple avoiding list overhead or does ghc optimize it out?</p></blockquote></div>If I&#39;m not mistaken, ghc will optimize it out. From <a href="http://hackage.haskell.org/packages/archive/base/4.5.1.0/doc/html/src/GHC-List.html#all">http://hackage.haskell.org/packages/archive/base/4.5.1.0/doc/html/src/GHC-List.html#all</a><div>

<br></div><div><div><font face="courier new, monospace">{-# RULES</font></div><div><font face="courier new, monospace"> ...</font></div><div><span style="font-family:&#39;courier new&#39;,monospace">&quot;all/build&quot;     forall p (g::forall b.(a-&gt;b-&gt;b)-&gt;b-&gt;b) . </span></div>

<div><font face="courier new, monospace">                all p (build g) = g ((&amp;&amp;) . p) True</font></div><div><font face="courier new, monospace"> #-}</font></div></div><div><br></div><div>See the docs on List fusion for details (note how &quot;all&quot; is listed as a &quot;good consumer&quot;): <a href="http://www.haskell.org/ghc/docs/7.4.2/html/users_guide/rewrite-rules.html#id690070">http://www.haskell.org/ghc/docs/7.4.2/html/users_guide/rewrite-rules.html#id690070</a></div>

<div><br></div><div>So in fact it may be the case that the tuple version (if it were valid Haskell) is less efficient because it can&#39;t take advantage of list fusion and has to allocate the tuple instead.</div><div><br>

</div><div>-- Dan Burton</div>