<div dir="ltr">If you are looking into a tackling lazy foldr, I&#39;d recommend also including or considering using foldMap as a basis. It can make an asymptotic difference for some folds. I sent Gabriel a version in that style. I&#39;ll dig up a copy and send it your way as well.<div>
<br></div><div>-Edward</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Aug 19, 2013 at 3:29 AM, Petr Pudlák <span dir="ltr">&lt;<a href="mailto:petr.mvd@gmail.com" target="_blank">petr.mvd@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">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    <div>Thank you all for the responses.<br>
      <br>
      Edward&#39;s objection is very serious, I didn&#39;t think of it.<br>
      Because of it I retract the proposal, this would indeed create big
      problems. (I just wish someone invents an oracle strictness
      analyzer...)<br>
      <br>
      Instead, as suggested, I&#39;ll make a package with `newtype` wrappers
      for tuples that will provide the extra-lazy monoid semantics. Any
      ideas for what other type classes except `Monoid` (and
      `Semigroup`) could be included? Or perhaps even other data types
      except tuples?<br>
      <br>
      Dne 08/18/2013 11:21 PM, Gabriel Gonzalez napsal(a):<br>
    </div><div class="im">
    <blockquote type="cite">
      
      <div>I&#39;m guessing this proposal is related
        to this Stack Overflow answer you gave:<br>
        <br>
        <a href="http://stackoverflow.com/a/18289075/1026598" target="_blank">http://stackoverflow.com/a/18289075/1026598</a><br>
        <br>
        Note that your solution is very similar to the solution in the
        `foldl` package I just released (also based off of the same blog
        post you got your solution from).  The key differences are that:<br>
        <br>
        * The `foldl` solution is for left folds and uses a strict tuple
        internally to prevent space leaks<br>
        * Your solution is for right folds and uses an extra-lazy tuple
        internally to promote laziness<br>
        <br>
        This suggests to me that it would be better to keep this
        extra-lazy tuple as an internal implementation detail of a
        right-fold package that would be the lazy analogy of `foldl`,
        rather than modifying the standard Haskell tuple.<br>
      </div>
    </blockquote></div>
    Yes, this is how I encountered the problem. If I have time I&#39;ll make
    a mirror package `foldr` based on extra-lazy tuples. (Or perhaps we
    could merge the ideas into a single package.)<br>
    <br>
      Best regards,<br>
      Petr<br>
  </div>

</blockquote></div><br></div>