<p>What are futures? It's something to do with lazy evaluation.</p>

A Future encapsulates a deferred calculation, and is commonly used to shoehorn lazy evaluation into a non-lazy language. The first time a future is evaluated, the code required to evaluate it is run, and the future is replaced with the result.
Since the future is replaced, subsequent evaluations do not execute the code again, and simply yield the result.