pad causes a stack overflow and pad1 uses up about 6m of heap.
pad1 xs =
  xs ++ [0x80] ++ ps
  where
     l = length xs
     pl = (64-(l+9)) `mod` 64
     ps = replicate pl 0x00

wild guess: if you compute the length when the consumer reaches ps,
you hold on to a copy of xs longer than needed, whereas if you compute the length upfront, you unfold xs too early.

the zip-trick you mentioned might work around this, allowing you to
consume xs lazily while still having its length at the end.

but if you're only interested in the **length modulo 64**, you should be able to process and let go of xs in chunks of length 64, too small
for overflows?

Claus
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to