anchor.diff:   * This equality behaves the same as [UnorderedIterableEquality] except that
    * it expects sets instead of iterables as arguments.
    */
  -class SetEquality<E> extends _UnorderedEquality<Set<E>> {
  +class SetEquality<E> extends _UnorderedEquality<E, Set<E>> {
     const SetEquality(
         [Equality<E> elementEquality = const DefaultEquality()])
         : super(elementEquality);
  
positive.code: 
    int hash(T e) {
      int hash = 0;
      for (var element in e) {
        int c = _elementEquality.hash(element);
        hash = (hash + c) & _HASH_MASK;
      }
  
negative.code:   bool isValidKey(Object o) => o is List<E>;
  }
  
  abstract class _UnorderedEquality<E, T extends Iterable<E>>
      implements Equality<T> {
    final Equality<E> _elementEquality;
  
    const _UnorderedEquality(this._elementEquality);
  