I'm new to Haskell and I'm trying to implement Euler's Sieve in stream processing style.
When I checked the Haskell Wiki page about prime numbers, I found some mysterious optimization technique for streams.In 3.8 Linear merging of that wiki:
primesLME = 2 : ([3,5..] `minus` joinL [[p*p, p*p+2*p..] | p <- primes']) where primes' = 3 : ([5,7..] `minus` joinL [[p*p, p*p+2*p..] | p <- primes'])joinL ((x:xs):t) = x : union xs (joinL t)
And it says
“The double primes feed is introduced here to prevent unneeded memoization and thus prevent memory leak, as per Melissa O'Neill's code.”
How could this be? I can't figure out how it works.