El subtipo dice que dada una expresión de un tipo, también podemos darle otro tipo. Decimos que el primero es un subtipo del segundo y esta relación de subtipo induce muchas otras relaciones. En símbolos,
Γ ⊢ E: SS< : TΓ ⊢ E: T
( ∀ α . Τ) < : τ[ T/ α]T
{ℓ1:A,ℓ2:B}<:{ℓ2:B,ℓ1:A}{ℓ1:A,ℓ2:B}≅{ℓ2:B,ℓ1:A}S≅T⟺S<:T∧T<:S{ℓ1:A,ℓ2:B}={ℓ2:B,ℓ1:A}T<:T
Por lo general, cuando hablamos de un lenguaje con el que subtipificación una media con una relación de subtipos no trivial en la tierra tipos, es decir, los tipos sin variables libres (que, por supuesto, puede y va a generar relaciones de tipificación para los tipos no-tierra). Por lo tanto, un sistema con polimorfismo de fila como el de Roy no es un lenguaje con subtipo en este sentido, aunque tiene la relación de subtipo no trivial que proviene de cualquier lenguaje polimórfico paramétrico implícitamente instanciado. El subtipo estructural, por otro lado, establece explícitamente relaciones de subtipo no triviales para tipos de suelo.
(≅)arriba, el subtipo estructural implica tipos de fila pero no viceversa. El polimorfismo paramétrico es ortogonal (en el sentido de que puede tenerlo o no, definitivamente hay interacciones) con los tipos de fila o el subtipo estructural. Un sistema con subtipo estructural + polimorfismo paramétrico subsume el tipo de fila + polimorfismo paramétrico (suponiendo algún tipo de "unión de registros") en el sentido de que cada término en el último puede escribirse con el mismo tipo en el primero. El primero solo puede escribir con tipos adicionales también. Usando el ejemplo de Brian, en un sistema con subtipos estructural y el polimorfismo paramétrico answer
tendría el mismo tipo que el de la versión de fila de escribir, sino que también tendría el tipo de la versión de subtipos así .
ρ{ c : Number }
información: pasar de un subtipo a un supertipo pierde información (tipo). Esto a menudo puede ser lo que desea: hay un tipo común que le importa y todo lo demás son detalles irrelevantes. Mi sesgo es mantener tanta información de tipo como sea posible y solo descartarla explícitamente. Las desventajas del enfoque del subtipo a menudo se evidencian en programas que son de tipo correcto, pero solo porque los tipos fueron empujados a un tipo "superior" (n sin información), por ejemplo, el registro vacío. Reiterando, el polimorfismo paramétrico (en general) conserva la información de tipo, el subtipo la pierde intencionalmente.