Hi All,

I was looking at the definition of intersperse on

http://hackage.haskell.org/package/base-4.7.0.1/docs/src/Data-List.html#intersperse

And found this

-- | The 'intersperse' function takes an element and a list and
-- \`intersperses\' that element between the elements of the list.
-- For example,
--
-- > intersperse ',' "abcde" == "a,b,c,d,e"

intersperse             :: a -> [a] -> [a]
intersperse _   []      = []
intersperse sep (x:xs)  = x : prependToAll sep xs


-- Not exported:
-- We want to make every element in the 'intersperse'd list available
-- as soon as possible to avoid space leaks. Experiments suggested that
-- a separate top-level helper is more efficient than a local worker.
prependToAll            :: a -> [a] -> [a]
prependToAll _   []     = []
prependToAll sep (x:xs) = sep : x : prependToAll sep xs



I don't understand why we need to "make every element in the 'intersperse'd list available as soon as possible to avoid space leaks." Could somebody shed some light on what could cause a space leak here? In particular, would this simpler version cause problems?

intersperse :: a -> [a] -> [a]
intersperse _ []  = []
intersperse _ [x] = [x]
intersperse a (x: xs@(y:ys)) = x : a : intersperse a xs 



Thanks,


Dimitri