anchor.diff:          | InterfaceData.ObjExpr(_, bindings) -> 
               List.choose (|MemberNameAndRange|_|) bindings
   
  +    // Sometimes interface members are stored in the form of `IInterface<'T> -> ...` so we need to get the 2nd generic arguments
  +    let internal (|MemberFunctionType|) (m: FSharpMemberFunctionOrValue) =
  +        let typ = m.FullType
  +        if typ.IsFunctionType && typ.GenericArguments.Count = 2 && m.IsProperty && m.EnclosingEntity.IsFSharp then
  +            typ.GenericArguments.[1]
  +        else typ
  +
       /// Ideally this info should be returned in error symbols from FCS
       /// Because it isn't, we implement a crude way of getting member signatures:
       ///  (1) Crack ASTs to get member names and their associated ranges
  
positive.code:             for (iface, instantiations) in getInterfaces e do
                  yield! iface.MembersFunctionsAndValues |> Seq.choose (fun m -> 
                             // Use this hack when FCS doesn't return enough information on .NET properties
                             if iface.IsFSharp || not m.IsProperty then Some (m, instantiations) else None)
           }
  
      let hasNoInterfaceMember e =
  
negative.code:             |> Seq.filter (fun (m, insts) -> 
                  // FullType might throw exceptions due to bugs in FCS
                  try
                      match m with
                      | MemberFunctionType typ -> 
                          let signature = sprintf "%s:%s" m.DisplayName (formatType { ctx with ArgInstantiations = insts }  typ)
                          not (Set.contains (signature.Replace(" ", "")) excludedMemberSignatures) 
                  with _ -> true)
          // All members are already implemented
          if Seq.isEmpty missingMembers then
  