anchor.diff:              type.requiredNamed)) {
         if (type.optionals.isEmpty) {
           var normType = fnType(normReturnType, normArgs);
  -        return wrapType(normType, isNormalized: true);
  +        return wrapType(normType, true);
         }
         var normOptionals = type.optionals.map(normalizeHelper).toList();
         var normType = fnType(normReturnType, normArgs, normOptionals);
  -      return wrapType(normType, isNormalized: true);
  +      return wrapType(normType, true);
       }
       var normNamed = JS('', '{}');
       _transformJSObject(type.named, normNamed, normalizeHelper);
  
positive.code:     _transformJSObject(type.requiredNamed, normRequiredNamed, normalizeHelper);
      var normType =
          fnType(normReturnType, normArgs, normNamed, normRequiredNamed);
      return wrapType(normType, isNormalized: true);
    }
    if (JS<bool>('!', '# instanceof #', type, GenericFunctionType)) {
      var formals = _getCanonicalTypeFormals(type.typeFormals.length);
  
negative.code: ///
  /// [isNormalized] is true when [type] is known to be in a canonicalized
  /// normal form, so the algorithm can directly wrap and return the value.
  Type wrapType(type, [@notNull bool isNormalized = false]) {
    // If we've already wrapped this type once, use the previous wrapper. This
    // way, multiple references to the same type return an identical Type.
    if (JS('!', '#.hasOwnProperty(#)', type, _typeObject)) {
  