Potential space leak in transpose

Andreas Abel andreas.abel at ifi.lmu.de
Thu May 14 10:27:17 UTC 2020


On 2020-05-13 22:27, Ryan Reich wrote:
> Why not just inline the definition of unzip and hand-optimize away the 
> pairs?

Isn't this what the original code of transpose is doing?

> On Tue, May 12, 2020, 10:24 David Feuer <david.feuer at gmail.com 
> <mailto:david.feuer at gmail.com>> wrote:
> 
>     Also, the more eager list allocation can increase residency, but I
>     don't think it can cause a leak.
> 
>     On Tue, May 12, 2020, 9:48 AM David Feuer <david.feuer at gmail.com
>     <mailto:david.feuer at gmail.com>> wrote:
> 
>         The cost of allocating the extra pairs.
> 
>         On Tue, May 12, 2020, 5:11 AM Andreas Abel
>         <andreas.abel at ifi.lmu.de <mailto:andreas.abel at ifi.lmu.de>> wrote:
> 
>               > I don't know how much that'll cost in practice.
> 
>             What costs are you worried about?
> 
>             On 2020-05-12 00:08, David Feuer wrote:
>              > In Data.List, we define
>              >
>              > transpose :: [[a]] -> [[a]]
>              > transpose [] = []
>              > transpose ([] : xss) = transpose xss
>              > transpose ((x : xs) : xss) = (x : [h | (h : _) <- xss]) :
>             transpose (xs
>              > : [t | (_ : t) <- xss])
>              >
>              > The potential difficulty is that we essentially mapMaybe
>             over the xss
>              > list twice in the third case. So we hang on to the heads
>             where we need
>              > the tails and the tails where we need the heads. We could
>             fix that with
>              > something like this:
>              >
>              > transpose ((x : xs) : xss) = (x : fronts) : transpose (xs
>             : rears)
>              >    where
>              >      (fronts, rears) = unzip [(h,t) | (h : t) <- xss]
>              >
>              > I don't know how much that'll cost in practice.
>              >
>              > _______________________________________________
>              > Libraries mailing list
>              > Libraries at haskell.org <mailto:Libraries at haskell.org>
>              > http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>              >
> 
>     _______________________________________________
>     Libraries mailing list
>     Libraries at haskell.org <mailto:Libraries at haskell.org>
>     http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
> 
> 
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
> 


More information about the Libraries mailing list