code: @Override
      public <I> MatchResult<I> matchResult(I item) {
          StringDescription mismatch = new StringDescription();
          if (matches(item, mismatch)) {
              return new MatchResultSuccess<>(item, this);
          } else {
              return new MatchResultMismatch<>(item, this, mismatch.toString());
          }
      }
docs: Returns a {@link MatchResult} that caches the mismatch descripton.
  @param <I>
  @param item
  @return match result