A truly remarkable thing about Haskell and about lazy evaluation is that it is possible to work with infinite lists. Not just large ones , but actual infinities ! The trick , of course , is that those parts of the oat which are unnecessary for a particular calculation are not calculated explicitly ( just the rule for their expansion is kept by the runtime environment).
A famous and ancient algorithm for find prime numbers is the Sieve of Eratosthenes. The idea here is to keep an initial element of the list of integers , but strike off all of its multiples as possible. The list prime , however , really is exactly the list of all the prime numbers!