двойной поток, чтобы предотвратить ненужное запоминание?
Я новичок в Haskell и пытаюсь реализовать сито Эйлера в стиле потоковой обработки.
Когда я проверилСтраница Wiki Хаскелла о простых числахЯ нашел загадочную технику оптимизации для потоков. В3.8 Линейное слияние этой вики:
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)
И это говорит
“Введена двойная подача простых чисел, чтобы предотвратить ненужное запоминание и, таким образом, предотвратить утечку памяти, согласно коду Мелиссы О'Нил.”
Как это могло произойти? Я не могу понять, как это работает.