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 list which are unnecessary for a particular calculation are not
calculated explicitly (just the rule for their expansion is kept by the runtimecalculated explicitly (just the rule for their expansion is kept by the runtime
environment).