The Stream object allows for lazy-evaluated, Scala-style streams. Elements are evaluated on demand, and calculated elements are shared between iterators. You can push new elements into a stream using the << operator.
Streams are particularly useful for defining infinite sequences, such as the Fibonacci sequence.
from fn import Stream
from fn.iters import take, drop, map
from operator import add
# Basic Stream usage
s = Stream() << [1,2,3,4,5]
# Infinite Fibonacci sequence
f = Stream()
fib = f << [0, 1] << map(add, f, drop(1, f))
assert list(take(10, fib)) == [0,1,1,2,3,5,8,13,21,34]