Parte 1: records y subtipos
Extienda su lenguaje con records, y subtipos, basandose en lo visto en clases. No se olvide que su lenguaje debe incluir `if'. Su verificador de tipos debe retornar el tipo mínimo del termino dado, si existe, y señalar un error sino.
Provea los tests suficientes para demostrar el buen funcionamiento de su verificador en presencia de subtipos.
Parte 2: subtipos y contratos
En su lenguaje, los tipos pueden tener un contrato, condición que se verifica dinámicamente. En lo que sigue notamos los tipos T@C, para referirnos al tipo T con contrato C.
Explique como se puede reconciliar la noción de “subsumption” con contratos. Es decir, explique que debe significar que T1@C1 <: T2@C2
Complemente la verificación de contratos teniendo particular cuidado con la asignación de culpa (blame) en caso de que se viole un contrato. (Hint: ahora, la culpa puede provenir del uso de una función, de su implementación, o tambien de un contrato)
Parte 3 (opcional pregrado / obligatorio posgrado)
reformule/extienda la formulación (y prueba) de coherencia para el sistema con subtipos y contratos, enfocandose en los contratos (o sea, lo que solo tiene que ver con lo visto en clase no lo tiene que repetir).
Instrucciones
Como siempre, para cada paso entregue código debidamente comentado, con tests y ejemplos ilustrativos.
Puntaje:
Fecha de entrega: Miercoles 17 de Noviembre, por U-Cursos.