anchor.diff:      return Future.wait([
         _matcher1.tryMatch(stream1).whenComplete(stream1.close),
         _matcher2.tryMatch(stream2).whenComplete(stream2.close)
  -    ]).then((descriptions) {
  -      var description1 = descriptions.first;
  -      var description2 = descriptions.last;
  +    ]).then((failures) {
  +      var failure1 = failures.first;
  +      var failure2 = failures.last;
   
         // If both matchers matched, use the one that consumed more of the stream.
  -      if (description1 == null && description2 == null) {
  +      if (failure1 == null && failure2 == null) {
           if (stream1.emittedValues.length >= stream2.emittedValues.length) {
             return _matcher1.tryMatch(stream);
           } else {
             return _matcher2.tryMatch(stream);
           }
  -      } else if (description1 == null) {
  +      } else if (failure1 == null) {
           return _matcher1.tryMatch(stream);
  -      } else if (description2 == null) {
  +      } else if (failure2 == null) {
           return _matcher2.tryMatch(stream);
         } else {
           return new StringDescription('both\n')
  -            .add(prefixLines(description1.toString(), prefix: '  '))
  +            .add(prefixLines(failure1.toString(), prefix: '  '))
               .add('\nand\n')
  -            .add(prefixLines(description2.toString(), prefix: '  '))
  +            .add(prefixLines(failure2.toString(), prefix: '  '))
               .toString();
         }
       });
  
positive.code: 
          var fork = stream.fork();
          return _matcher.tryMatch(fork).whenComplete(fork.close)
              .then((description) {
            if (description != null) {
              return stream.next().then((_) => consumeNext());
            }
  
  
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(),
  