# A stream implementation for Ruby

**URL:** <https://www.ruby-forum.com/t/a-stream-implementation-for-ruby/157963>\
**Category:** Ruby\
**Created:** [January 17, 2009, 12:07am UTC](https://www.ruby-forum.com/t/a-stream-implementation-for-ruby/157963 "2009-01-17T00:07:34Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![flatekmonkey](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/e8c25b/32.png) [@flatekmonkey](https://www.ruby-forum.com/u/flatekmonkey)\
**Post date:** [January 17, 2009, 12:07am UTC](https://www.ruby-forum.com/t/a-stream-implementation-for-ruby/157963/1 "2009-01-17T00:07:34Z")

</div>

Hi all

Streams are lazily evaluated lists. I have been inspired by James’  
excellent blog about infinite streams, and the functional interface  
of Scheme towards their usage.  
But just in order to keep this short I have put all the links to the  
release, documentation and other sources on the Labrador Rubyforge  
Homepage.  
[http://labrador.rubyforge.org/index.html](http://labrador.rubyforge.org/index.html)

Enjoy.  
Robert

---

<div class="post-metadata">

**Author:** ![flatekmonkey](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/e8c25b/32.png) [@flatekmonkey](https://www.ruby-forum.com/u/flatekmonkey)\
**Post date:** [January 19, 2009, 10:05am UTC](https://www.ruby-forum.com/t/a-stream-implementation-for-ruby/157963/2 "2009-01-19T10:05:38Z")

</div>

Robert D. wrote:

> Streams are lazily evaluated lists.

Aside: it is also possible to make use of infinite enumerators in Ruby  
(i.e. a traditional ‘each’ method which yields an infinite number of  
values), and this may be sufficient in some applications.

In order for this to be useful, you need to process chains of methods  
acting ‘horizontally’ instead of ‘vertically’. The block form of  
Enumerator lets this be done natively in ruby 1.9:  
[http://redmine.ruby-lang.org/issues/show/707](http://redmine.ruby-lang.org/issues/show/707)

and with a little work, this can be made entirely transparent to map,  
select etc:  
[http://redmine.ruby-lang.org/issues/show/708](http://redmine.ruby-lang.org/issues/show/708)

It turns out to be very easy to implement the block form of Enumerator  
in ruby 1.8. I contributed an implementation of this to the Facets  
project:

[http://facets.rubyforge.org/git?p=facets.git;a=blob\_plain;f=lib/lore/facets/enumerator.rb;hb=HEAD](http://facets.rubyforge.org/git?p=facets.git;a=blob_plain;f=lib/lore/facets/enumerator.rb;hb=HEAD)  
[http://facets.rubyforge.org/git?p=facets.git;a=blob\_plain;f=lib/more/facets/filter.rb;hb=HEAD](http://facets.rubyforge.org/git?p=facets.git;a=blob_plain;f=lib/more/facets/filter.rb;hb=HEAD)

Anyway, I just thought this was worth a mention. It’s not as powerful as  
full lazy evaluation, although if you combine this with Generators I  
think it gets pretty close.

Regards,

Brian.
