A subtipagem diz que, dada uma expressão de um tipo, também podemos dar outro. Dizemos que o primeiro é um subtipo do último e esse relacionamento de subtipo induz muitos outros relacionamentos. Em símbolos,
Y ⊢ E: SS< : TY ⊢ 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
Normalmente, quando falamos de uma língua com subtipagem que uma média com uma relação de subtipos não-trivial em terra tipos, tipos ou seja, sem variáveis livres (que, é claro, pode e irá gerar relacionamentos Subtipagem para tipos não-terra). Portanto, um sistema com polimorfismo de linha como o de Roy não é uma linguagem com subtipagem nesse sentido, embora tenha uma relação de subtipo não trivial que vem de qualquer linguagem polimórfica paramétrica implicitamente instanciada. A subtipagem estrutural, por outro lado, declara explicitamente relacionamentos de subtipagem não triviais para tipos de solo.
( ≅)acima, a subtipagem estrutural implica tipos de linha, mas não vice-versa. O polimorfismo paramétrico é ortogonal (no sentido em que você pode ou não ter, definitivamente existem interações) para tipos de linhas ou subtipos estruturais. Um sistema com subtipo estrutural + polimorfismo paramétrico substitui o tipo de linha + polimorfismo paramétrico (assumindo algum tipo de "união de registros") no sentido de que cada termo no último pode ser digitado com o mesmo tipo no primeiro. O primeiro também é capaz de digitar com outros tipos também. Usando o exemplo de Brian, em um sistema com subtipagem estrutural e polimorfismo paramétrico answer
teria o mesmo tipo como na versão de linha de digitação, mas também teria o tipo da versão subtipos bem .
ρ{ c : Number }
informação: passar de um subtipo para um supertipo perde (tipo) informações. Muitas vezes, isso pode ser o que você deseja: existe um tipo comum de seu interesse e todo o resto são detalhes irrelevantes. Minha tendência é manter o máximo possível de informações de tipo e descartá-las explicitamente. As desvantagens da abordagem de subtipagem são frequentemente evidenciadas por programas com o tipo correto, mas apenas porque os tipos foram enviados para um tipo "superior" (n sem informações), por exemplo, o registro vazio. Reiterando, o polimorfismo paramétrico (em geral) preserva as informações de tipo, subtipando-as intencionalmente.