Estou me preparando para meu exame final e me deparei com um problema. O tópico é subtipagem, eu entendo como funciona a subtipagem para registros, mas para funções não entendo como funciona. Peguei o exemplo do exame, não precisa fazer o exemplo inteiro. Basta-me que alguém me explique como funciona para supertipo e para subtipo, então um exemplo para supertipo e outro para subtipo, para que eu possa me guiar por ele em outros exemplos.
Considere o tipo
{ head : int, neck : int, toes : int list} -> { hands : int, feet : int}
Para cada tipo abaixo, responda “subtipo” se for um subtipo do tipo acima, “supertipo” se for um supertipo do tipo acima, “nenhum” se nenhum, ou “ambos” se um subtipo e um supertipo. eu. { toes : int list, neck : int } -> { hands : int, feet : int}
ii. { head : int, neck : int, toes : int list} -> { hands : int, feet : int, arms : int}
iii. { toes : int list, neck : int } -> { hands : int, feet : int, arms : int}.
4. { hands : int, feet : int} -> { head : int, neck : int, toes : int list}
v.{ head : int, neck : int, toes : int list, fingers : int list} -> { feet : int}
Eu tentei com esta regra, mas isso não produz o resultado esperado.
A regra geral para subtipagem de funções é: If t3 <: t1 and t2 <: t4, then t1->t2 <: t3->t4
.
t3 <: t1
isso significa quet3 is subtype for t1
Obrigado.