title: infinite recursive stream overflows
body: <p>Please explain why the below stream overflows?</p>
  
  <pre><code>infiniteStream = function(page) {
    return Bacon.fromBinder(function(sink) {
      sink(page);
      sink(new Bacon.Next(function() { return infiniteStream(page + 1); }));
    }).flatMapConcat(function(v) {
      return v;
    });
  };
  
  fiveStream = function(count) {
    return Bacon.fromArray([count, count, count, count, count]);
  };
  
  stream = infiniteStream(1).flatMapConcat(function(v) {
    return fiveStream(v);
  });
  
  // fine
  stream.take(6).log();
  
  // Error: maximum call stack exceeded
  stream.take(7).log();
  </code></pre>
  
  <p>I need an infinite stream, I can map to some values, I want to use <code>take(10)</code> to pull as needed, or I want to end this stream whenever some specific value is reached, eg:</p>
  
  <pre><code>stream = stream.withHandler(function(v) {
    if (v.hasValue() &amp;&amp; v.value() == "link50") {
      this.push(new Bacon.Error("bad link"));
      return this.push(new Bacon.End());
    } else {
      return this.push(v);
    }
  });
  </code></pre>