anchor.diff:        .addAll('', ' and ', '', _functionMatchers);
   }
   
  -@visibleForTesting
  -class FunctionMatcher<T> extends CustomMatcher {
  +class _FunctionMatcher<T> extends CustomMatcher {
     final Object? Function(T value) _feature;
   
  -  FunctionMatcher(String name, this._feature, Object? matcher)
  +  _FunctionMatcher(String name, this._feature, Object? matcher)
         : super('`$name`:', '`$name`', matcher);
   
     @override
  
positive.code: /// by calls to [TypeMatcher.having].
  class HavingMatcher<T> implements TypeMatcher<T> {
    final TypeMatcher<T> _parent;
    final List<FunctionMatcher<T>> _functionMatchers;
  
    HavingMatcher(TypeMatcher<T> parent, String description,
        Object? Function(T) feature, dynamic matcher,
        [Iterable<FunctionMatcher<T>>? existing])
        : _parent = parent,
          _functionMatchers = [
            ...?existing,
            FunctionMatcher<T>(description, feature, matcher)
          ];
  
    @override
    TypeMatcher<T> having(
            Object? Function(T) feature, String description, dynamic matcher) =>
        HavingMatcher(_parent, description, feature, matcher, _functionMatchers);
  
    @override
    bool matches(dynamic item, Map matchState) {
  
negative.code: // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
  // for details. All rights reserved. Use of this source code is governed by a
  // BSD-style license that can be found in the LICENSE file.
  
  import 'custom_matcher.dart';
  import 'interfaces.dart';
  