<div dir="ltr">If you are looking into a tackling lazy foldr, I'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'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"><<a href="mailto:petr.mvd@gmail.com" target="_blank">petr.mvd@gmail.com</a>></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's objection is very serious, I didn'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'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'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'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>