Lazy stream implementation for Ruby because Enumerators are kinda silly.
Streams are infinite, lazily evaluated, awesome lists. Here's an example of a Stream that represents the set of positive integers:
def int_stream(i)
Stream.new(i) do
int_stream(i + 1)
end
end
integers = int_stream(1)
You can access streams like any other data structure:
integers[0] # => 1
integers[12] # => 13
integers[999999] # => 999998
Each value will be lazily calculated by materializing the Streams values until the requested value. Streams are stateless so a Stream will recalculate for every access.
You can also create finite Streams from infinite ones:
integers.take(5)
Finite streams have some extra functionality due to their ability to end:
integers.take(5).each do |i|
puts i
end
integers.length # => 5
Infinite Streams also support interation and length calculations but you will need to be prepared to wait, forever. No seriously, I mean for all time. Its infinite.
Streams become most powerful when used with high order functions. At the
moment ruby-stream supports map, filter, each, take and scan operations that operate
as they would on normal collections (these operations will only actually be
applied to Stream elements on access or iteration however).

