<div dir="auto">There's no use of head or tail functions. Two list comprehensions equivalent to two applications of mapMaybe, rather than one of mapMaybe and a second of unzip. The whole situation is rather sad; a generalization of the selector thunk trick could in principle plug the leak without hurting performance, but that will require various GHC changes.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Aug 24, 2020, 1:25 AM Henning Thielemann <<a href="mailto:lemming@henning-thielemann.de">lemming@henning-thielemann.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
On Sun, 23 Aug 2020, David Feuer wrote:<br>
<br>
> Data.List.transpose, unfortunately, can potentially leak space. The <br>
> problem is that it walks a list of lists twice: once to get the heads <br>
> and once to get the tails. Depending on the way the result is consumed, <br>
> it's possible that heads or tails that are never used will be retained <br>
> by the garbage collector. I have a fix[*] that probably makes the <br>
> function slower in typical cases, but that plugs the leak. What do y'all <br>
> say?<br>
<br>
Your way sounds more correct than using 'head' and 'tail'. I have no <br>
numbers, though.<br>
</blockquote></div>