Limiting the right, but the problem is that there is no type satisfying this limitation, and it will be as a supertype A, and so B.
match , upcast (:>) , . IX, IY, .
, .NET - IX+IY, , . , :
let (a:IX+IY) = new A()
, IX * IY, , . , , :
let asTuple a = (a :> IX, a :> IY)
let mk t =
match t with
| Choice1Of2() -> new A() |> asTuple
| Choice2Of2() -> new B() |> asTuple