           self.tick();
         };
 
-        this.failHandle = function(value) {
-          self.fail(value);
+        this.failHandle = function(err) {
+          self.result = err;
+          self.throw = true;
+          self.tick();
         };
 
-        this.send     = false;
+        this.throw    = false;
         this.result   = undefined;
 
         this.iterator = undefined;


UTILITIES =

  async: -> "
    (function(){
      var async = function(generator) {

      Tracker.prototype = {
        tick: function() {
          var next;
          if (this.throw) {
            next = this.iterator.throw(this.result);
            this.throw = false;
          } else {
            next = this.iterator.next(this.result);
          }

          if (next.done) {
            this.win(next.value);
          } else {
            next.value.then(this.thenHandle, this.failHandle);
          }
        }
      };

      return async;
    }())
  " 

  stream: -> "
    (function(){
