anchor.diff:          // exclude dart._internal.EfficientLength and others?
           && MirrorSystem.getName(t.owner.qualifiedName) != "dart._internal";
       })
  -    // don't erase in typeToMap...
  -    .map((m) => typeToMap(m, from, false, false)).toList();
  +    // - don't erase in typeToMap...
  +    // - contravariant (i.e. dynamic=Nothing) type arguments for satisfied
  +    //   types! The assumption is that most type parameters are covariant,
  +    //   i.e. producers, and we use Nothing for return types.
  +    .map((m) => typeToMap(m, from, false, false, false)).toList();
   
     // print("satisfies (i): " + map[keySatisfies].toString());
   
  
positive.code:       map["\$pt"] = "f";
        // Don't erase! Callable's are generic, so there is no automatic
        // type erasure.
        map[keyType] = typeToMap(pt.returnType, from, false, false);
        map[keyMetatype] = metatypeParameter;
        map[keyName] = MirrorSystem.getName(pm.simpleName);
        List plist = parametersToList(pt.parameters, from);
        if (plist.isNotEmpty) {
          map[keyParams] = [plist];
        }
      }
      else {
        map[keyType] = typeToMap(pm.type, from);
        map[keyMetatype] = metatypeParameter;
        map[keyName] = MirrorSystem.getName(pm.simpleName);
  
negative.code:     bool forceAbstract) {
  
    var map = new Map();
    // contraviarant return (i.e. dynamic=Nothing)
    map[keyType] = typeToMap(mm.returnType, from, false, true, false);
  
    if (mm.isGetter) {
      // FIXME Find a way to determine if a setter exists. We could search
  