anchor.diff:      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(
  +      return matcher.tryMatch(stream).then((failure) {
  +        if (failure == null) return matchNext();
  +        var newFailure = new StringDescription(
                 'matcher #${_matchers.length - matchers.length} failed');
  -        if (description.length != 0) newDescription.add(':\n$description');
  -        return newDescription;
  +        if (failure.length != 0) newFailure.add(':\n$failure');
  +        return newFailure;
         });
       }
   
  
positive.code: 
    Future<Description> tryMatch(ScheduledStream stream) {
      var fork = stream.fork();
      return _matcher.tryMatch(fork).whenComplete(fork.close).then((description) {
        if (description != null) return null;
        return _matcher.tryMatch(stream);
      });
    }
  
negative.code: 
          var fork = stream.fork();
          return _matcher.tryMatch(fork).whenComplete(fork.close)
              .then((failure) {
            if (failure != null) {
              return stream.next().then((_) => consumeNext());
            }
  
  