¿Cómo convertir implícitamente a supertipos comunes en coincidencias de patrones F #?

Resumen del problema

En el momento en que uso f #, debo coaccionar explícitamente un valor para el tipo principal de su tipo para obtener expresiones de coincidencia de patrones para verificar el tipo correctamente. Idealmente me gustaría una forma más ordenada de hacer.

Ejemplo

Supongamos que tengo alguna jerarquía de clases:

type Foo () =
    abstract member Value : unit -> string

type A (i:int) = 
    inherit Foo ()
        override this.Value () = i.ToString()

type B (s:string) = 
    inherit Foo ()
        override this.Value () = s

Idealmente, y en algunos lenguajes de programación normalmente, escribiría el equivalente de lo siguiente:

let bar (i:int) : Foo =
    match i with
      | 1 -> B "one"
      | _ -> A i

Sin embargo, esto falla al escribir la verificación correctamente, dándome el error "Se esperaba que esta expresión tuviera el tipo Foo pero aquí tiene el tipo B". No entiendo por qué el compilador no tiene suficiente información para inferir un supertipo común para la expresión de coincidencia y luego verifica que el supertipo común sea 'Foo'.

Actualmente, me veo obligado a proporcionar una coerción explícita para cada caso en la coincidencia de patrones:

let bar2 (i:int) : Foo =
    match i with
      | 1 -> (B "one") :> Foo
      | _ -> (A i) :> Foo

Me gustaría evitar esto.

Notas adicionales

La intuición sugiere que esto es el resultado de un problema más general. Sin embargo, habría pensado que algo tan común como la coincidencia de patrones, o si las declaraciones que también exhiben la misma propiedad, tendrían una regla de verificación de tipos para dar cuenta de los supertipos comunes.Antes de que nadie sugiera, agradezco que si A o B fueran Expresiones de Objetos esto funcionaría, pero mi ejemplo real es crear instancias de clases C # donde son clases normales.¿Hay alguna manera de declarar funciones para convertir tipos implícitamente, como por ejemplo scala, para poder aplicar conversiones automáticas para el módulo donde estoy haciendo esta generación?

Gracias por cualquier ayuda en este asunto.

Respuestas a la pregunta(2)

Su respuesta a la pregunta