[Haskell-cafe] reversing big list with constant heap space used

Evan Laforge qdunkan at gmail.com
Wed May 16 17:08:00 EDT 2007


> I think that in every particular case you have to find out how to avoid
> 'reverse'. Especially if you have two 'reverse's like in
>    reverse . dropWhile p . reverse
>  there are more efficient solutions.

Just from curiosity, what *is* an efficient way to do rDropWhile?
Here's something which at least avoids 2 reverses:

rDropWhile = doRDropWhile []

doRDropWhile accum f [] = []
doRDropWhile accum f (x:xs)
    | f x = doRDropWhile (x:accum) f xs
    | otherwise = reverse (x:accum) ++ doRDropWhile [] f xs


I assume this is not in Data.List to discourage people from doing
things to the right side of lists...  it's still useful for string
stuff where ByteString would be overkill though.


More information about the Haskell-Cafe mailing list