Since the brackets mean something in F # (this indicates a tuple), so they do not match.
As indicated, a method testis defined as a method that takes a tuple of two values as arguments unit. If you use Reflection to get MethodInfo, the method is defined as:
Void test(System.Tuple`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit])
This is consistent with the method OK, but not the method KO.
If you redefine the interface for
type IBase =
abstract member test : unit * unit -> unit
Then it OKdoes not compile, but KOdoes.
test, :
Void test(Microsoft.FSharp.Core.Unit, Microsoft.FSharp.Core.Unit)