A lazy stream takes a readable stream and wraps it.
Any reads or pipes on it propagate to the original stream.
This allows you to model your program flow as small transformations on streaming data and only apply them when you actually pipe the wrapped input stream into an output stream