Comportamiento extraño de los registros F #

Hay algunos casos en los que el comportamiento de F # records es extraño para mí:

No hay advertencia sobre la ambigüedad.

type AnotherPerson = {Id: int; Name: string}
type Person = {Id: int; Name: string;}

// F# compiler will use second type without any complains or warnings
let p = {Id = 42; Name = "Foo";}

Advertencia sobre deconstrucción de registros en lugar de construcción de registros.

En lugar de recibir una advertencia sobre la construcción de registros en el caso anterior, el compilador F # emitió una advertencia sobre los registros "deconstrucción":

// Using Person and AnotherPerson types and "p" from the previous example!
// We'll get a warning here: "The field labels and expected type of this 
// record expression or pattern do not uniquely determine a corresponding record type"
let {Id = id; Name = name} = p

Tenga en cuenta que no hay advertencias con la coincidencia de patrones (sospecho que eso se debe a que los patrones se crean utilizando "expresiones de construcción de registros" y no con "expresiones de deconstrucción de registros"):

match p with
| {Id = _; Name = "Foo"} -> printfn "case 1"
| {Id = 42; Name = _} -> printfn "case 2"
| _ -> printfn "case 3"

Error de inferencia de tipo con campo faltante

¡El compilador F # elegirá el segundo tipo y luego emitirá un error porque falta el campo Edad!

type AnotherPerson = {Id: int; Name: string}
type Person = {Id: int; Name: string; Age: int}

// Error: "No assignment given for field 'Age' of type 'Person'"
let p = {Id = 42; Name = "Foo";}

Sintaxis fea para "deconstrucción de registros"

Le hice una pregunta a varios colegas míos: "¿De qué trata este código?"

type Person = {Id: int; Name: string;}
let p = {Id = 42; Name = "Foo";}

// What will happend here?
let {Id = id; Name = name} = p

Eso fue una sorpresa total para todos que "id" y "nombre" son en realidad "lvalues" aunque se colocaron en el "lado derecho" de la expresión. Entiendo que esto tiene mucho más que ver con las preferencias personales, pero para la mayoría de las personas parece extraño que en un caso particular los valores de salida se coloquen en el lado derecho de la expresión.

No creo que todo esto sea un error, sospecho que la mayoría de estas cosas son realmente características.
Mi pregunta es:¿Hay algún racional detrás de un comportamiento tan oscuro?

Respuestas a la pregunta(2)

Su respuesta a la pregunta