A use of the function '{0}' does not match a type inferred elsewhere. The inferred type of the function is {1}. The type ...

A use of the function '{0}' does not match a type inferred elsewhere. The inferred type of the function is
    {1}.    
The type of the function required at this point of use is
    {2}    {3}
This error may be due to limitations associated with generic recursion within a 'let rec' collection or within a group of classes. Consider giving a full type signature for the targets of recursive calls including type annotations for both argument and return types.