In type theory and functional programming, a stream is a potentially infinite analog of a list, given by the coinductive definition: Generating and computing with streams requires lazy evaluation, either implicitly in a lazily evaluated language or by creating and forcing thunks in an eager language.