Объясните этот кусок кода haskell, который выводит поток простых чисел
У меня проблемы с пониманием этого куска кода:
let
sieve (p:xs) = p : sieve (filter (\ x -> x `mod` p /= 0) xs)
in sieve [2 .. ]
Может кто-нибудь сломать это для меня? Я понимаю, что в этом есть рекурсия, но это проблема, которую я могуЯ не понимаю, как работает рекурсия в этом примере.