<br><br>On Sun, Jun 6, 2010 at 5:10 AM, Thomas Hartman &lt;<a href="mailto:tphyahoo@gmail.com">tphyahoo@gmail.com</a>&gt; wrote:<br>&gt; Here&#39;s two implementations of break, a snappy one from the prelude,<br>...<br>&gt; prelbreak p xs = (takeWhile (not . p) xs,dropWhile (not . p) xs) --<br>
&gt; fast, more or less as implemented in prelude iiuc<br><br>I had a look at the prelude, and I was surprised to see there&#39;s 2 versions, depending on a flag :<br><br><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<font class="Apple-style-span" face="&#39;courier new&#39;, monospace">#ifdef USE_REPORT_PRELUDE<br></font><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">break p                 =  span (not . p)<br>
</font><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">#else<br></font><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">-- HBC version (stolen)<br></font><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">break _ xs@[]           =  (xs, xs)<br>
</font><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">break p xs@(x:xs&#39;)<br></font><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">           | p x        =  ([],xs)<br></font><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">           | otherwise  =  let (ys,zs) = break p xs&#39; in (x:ys,zs)<br>
</font><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">#endif</font></blockquote><div><br></div><div>I&#39;m curious why is it so, and which version is compiled in the platform or the ghc binaries.</div>
<div>( my guess is USE_REPORT_PRELUDE compiles functions as defined in the haskell report, but the other version is faster and used by default. )</div><br>David.