<div dir="ltr">Is foldl = foldl' ever going to happen?<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Feb 17, 2015 at 11:50 PM, Roman Cheplyaka <span dir="ltr"><<a href="mailto:roma@ro-che.info" target="_blank">roma@ro-che.info</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Note that foldr (+) 0 has nothing to do with laziness — it's eager. Its<br>
problem is that it's not tail-recursive.<br>
<br>
foldl (+) 0 would be an example of a laziness issue.<br>
<br>
If you want to specify which functions should or shouldn't be used in a<br>
lazy context, take a look at polarity (see Harper's Practical<br>
Foundations for Programming Languages). So you could say, for instance,<br>
that it doesn't make sense to use + in a lazy context; that'd eliminate<br>
half the cases of laziness-induced memory leaks in practice.<br>
<br>
If instead you want to impose some upper bound on the memory consumption<br>
without caring about specific cases, then see this ICFP'12 paper:<br>
<a href="http://www.dcc.fc.up.pt/~pbv/AALazyExtended.pdf" target="_blank">http://www.dcc.fc.up.pt/~pbv/AALazyExtended.pdf</a><br>
<div class="HOEnZb"><div class="h5"><br>
On 18/02/15 07:04, Eugene Kirpichov wrote:<br>
> Hello haskell-cafe,<br>
><br>
> Let me repost here a question I posted to cstheory stackexchange - in<br>
> hopes that there are more type theory experts here.<br>
><br>
> <a href="http://cstheory.stackexchange.com/questions/29518/type-systems-preventing-laziness-related-memory-leaks" target="_blank">http://cstheory.stackexchange.com/questions/29518/type-systems-preventing-laziness-related-memory-leaks</a><br>
><br>
> Perhaps the main source of performance problems in Haskell is when a<br>
> program inadvertently builds up a thunk of unbounded depth - this causes<br>
> both a memory leak and a potential stack overflow when evaluating. The<br>
> classic example is defining sum = foldr (+) 0 in Haskell.<br>
><br>
> Are there any type systems which statically enforce lack of such thunks<br>
> in a program using a lazy language?<br>
><br>
> Seems like this should be on the same order of difficulty as proving<br>
> other static program properties using type system extensions, e.g. some<br>
> flavors of thread safety or memory safety.<br>
<br>
</div></div><div class="HOEnZb"><div class="h5">_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br></div>