Yeah, you should absolutely mind the order of the parameters (or more generally, when the operation isn&#39;t commutative), the strictness of the function&#39;s second parameter. In this case, both (&amp;&amp;) and (||) are strict in their first parameter, but both &quot;short circuit&quot; if the first parameter is False/True, and don&#39;t evaluate their second parameter. The short-circuiting (via laziness) terminates foldr&#39;s traversal of the entire list structure and saves the program lots of work. By flipping the arguments, you&#39;re basically forcing testr&#39; to traverse the entire list before saying what it knew from the beginning.<div>
<br><div class="gmail_quote">On Tue, Oct 11, 2011 at 10:45 PM, Frodo Chao <span dir="ltr">&lt;<a href="mailto:frodogreat@gmail.com">frodogreat@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi,<br><br>I came upon this when playing with foldr and filter. Compare the two definitions:<br><br>testrĀ  n = foldr (\x y -&gt; x &amp;&amp; y) True [t | (_, t) &lt;- zip [1 .. n] [True, True ..]]<br>testr&#39; n = foldr (\x y -&gt; y &amp;&amp; x) True [t | (_, t) &lt;- zip [1 .. n] [True, True ..]]<br>

<br>I tried these functions on ghci (The Glorious Glasgow Haskell Compilation System, version 7.0.3), and get the following results (with :set +s):<br><br>testr 1000000 =&gt; True<br>(0.01 secs, 7920832 bytes)<br>testr&#39; 1000000 =&gt; True<br>

(8.72 secs, 446585344 bytes)<br><br>This bizarre (at least to me) behavior also applies to ||. Should I mind the orderings of the parameters (especially the accumulator) in the function passed to foldr?<br><br>Thak you for reading.<br>

<br>Sincerely yours,<br><font color="#888888">Frodo Chao<br><br>
</font><br>_______________________________________________<br>
Glasgow-haskell-users mailing list<br>
<a href="mailto:Glasgow-haskell-users@haskell.org">Glasgow-haskell-users@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/glasgow-haskell-users" target="_blank">http://www.haskell.org/mailman/listinfo/glasgow-haskell-users</a><br>
<br></blockquote></div><br></div>