Make lines stricter to fix a space leak

Yitzchak Gale gale at sefer.org
Mon Sep 27 13:40:52 EDT 2010


Daniel Fischer wrote:
> Proposal: A stricter implementation of lines.
> Reason: The current implementation causes a space leak
> Ticket: http://hackage.haskell.org/trac/ghc/ticket/4334

I propose the following combinator approach as
an alternative:

lines :: String -> [String]
lines = map (takeWhile (/= '\n')) . takeWhile (not . null) .
            iterate (drop 1 . dropWhile (/= '\n'))

GHC fuses that into a tight loop. So in addition to solving
the space leak, it is faster and uses less heap than both
the existing implementation and Daniel's proposal.
It is also cleaner and easier to read, in my opinion.

Thanks,
Yitz


More information about the Libraries mailing list