In F #, interfaces are always implemented explicitly, so this is not even a problem that needs to be solved. So you would implement these interfaces regardless of whether the method names were the same:
type ITest =
abstract member Test : unit -> unit
type ITest2 =
abstract member Test : unit -> unit
type Dual() =
interface ITest with
member __.Test() = Console.WriteLine("ITest.Test")
interface ITest2 with
member __.Test() = Console.WriteLine("ITest2.Test")
, , F # . Dual, Test. ITest ITest2:
let func (d:Dual) = d.Test()
let func (d:Dual) =
(d :> ITest).Test()
(d :> ITest2).Test()
, upcast :> , , , .
, , , .