anchor.diff:  
           var fork = stream.fork();
           return _matcher.tryMatch(fork).whenComplete(fork.close)
  -            .then((description) {
  -          if (description != null) {
  +            .then((failure) {
  +          if (failure != null) {
               return stream.next().then((_) => consumeNext());
             }
   
  
positive.code:     matchNext() {
        if (matchers.isEmpty) return new Future.value();
        var matcher = matchers.removeFirst();
        return matcher.tryMatch(stream).then((description) {
          if (description == null) return matchNext();
          var newDescription = new StringDescription(
                'matcher #${_matchers.length - matchers.length} failed');
          if (description.length != 0) newDescription.add(':\n$description');
          return newDescription;
        });
      }
  
  
negative.code:       });
      }
  
      return collectValues(_n).then((failure) {
        if (failure != null) return failure;
        var matchState = {};
        if (_matcher.matches(collectedValues, matchState)) return null;
        return _matcher.describeMismatch(collectedValues, new StringDescription(),
  