ikegami,
As you noted, the list is never constructed - there is only an iterator that finds the next randomly chosen number. Additionally, a bitstring is compact. If you wanted to generate 0 .. 80_000_000, it would create a bitstring only about 1 mb in size.