anchor.diff:              paramIdents.normalParameterTypes.length == func.normalParameterTypes.length; })
           .update((AbstractType func) {
             if (func is FunctionType) {
  -            for (var i = 0; i < paramIdents.normalParameterTypes.length;i++)
  +            
  +            for (var i = 0; i < paramIdents.normalParameterTypes.length;i++){
                 subsetConstraint(func.normalParameterTypes[i], paramIdents.normalParameterTypes[i]);
  -            for (var i = 0; i < func.optionalParameterTypes.length;i++)
  -              subsetConstraint(func.normalParameterTypes[i], paramIdents.normalParameterTypes[i]);
  +              subsetConstraint(paramIdents.normalParameterTypes[i], func.normalParameterTypes[i], filter: onlyParameterTypesAndAnnotated);
  +            }
  +            for (var i = 0; i < func.optionalParameterTypes.length;i++){
  +              subsetConstraint(func.optionalParameterTypes[i], paramIdents.optionalParameterTypes[i]);
  +              subsetConstraint(paramIdents.optionalParameterTypes[i], func.optionalParameterTypes[i], filter: onlyParameterTypesAndAnnotated);
  +            }
               
               for(Name name in func.namedParameterTypes.keys){
                 subsetConstraint(func.namedParameterTypes[name], paramIdents.namedParameterTypes[name]);
  +              subsetConstraint(paramIdents.namedParameterTypes[name], func.namedParameterTypes[name], filter: onlyParameterTypesAndAnnotated);
               }
               subsetConstraint(func.returnType, returnIdent);
             }
  
positive.code:     ParameterTypeIdentifiers paramIdents = new ParameterTypeIdentifiers.FromCallableElement(node, node.sourceElement.library, node.sourceElement);
      
      types.add(elementTypeIdent, new FunctionType.FromIdentifiers(returnIdent, paramIdents));
  
      //TODO (jln): check if this is correct.
      //equalConstraint(elementTypeIdent, new PropertyTypeIdentifier(new NominalType(node.classDecl), node.name));
    }
    
    visitFunctionParameterElement(FunctionParameterElement node){
  
negative.code:     }
    }
    
    
    /*
     * When a functionTypedFormalParameter gets a abstractType, it needs to check if it matches a functionType with the same number of parameters.
     * If so bind these function parameters to the arguments and bind the return type.
  