[1] This is the functional representation described in exercise 2.4. Essentially any functional representation (e.g., a message-passing implementation) would do as well. Notice that we can install these definitions in the lazy evaluator simply by typing them at the driver loop. If we had originally included pair, head, and tail as primitives in the global environment, they will be redefined. (Also see exercises 4.25 and 4.26.)
[2] This permits us to create delayed versions of more general kinds of list structures, not just sequences. Hughes 1990 discusses some applications of lazy trees.
4.2.3 Streams as Lazy Lists