Wyjaśnij ten fragment kodu haskell, który generuje strumień liczb pierwszych
Mam problem ze zrozumieniem tego fragmentu kodu:
let
sieve (p:xs) = p : sieve (filter (\ x -> x `mod` p /= 0) xs)
in sieve [2 .. ]
Czy ktoś może mi to złamać? Rozumiem, że jest w nim rekurencja, ale to problem, którego nie rozumiem, jak działa rekursja w tym przykładzie.