Explicit ForAll

Juan Pablo Yamamoto
jpyamamoto[at]ciencias.unam.mx
Lógica Computacional II. Semestre 2025-1.

Polimorfismo en tipos

Haskell está construido sobre el fundamento del Sistema F.

ExplicitForAll

En Haskell, el cuantificador universal tiende a estar oculto, pero ímplicito.

Pero también podemos pedirle al compilador que nos permita escribir explícitamente los cuantificadores:

ScopedTypeVariables

Debido a que en general no damos todos los tipos de todos los términos de un programa, puede resultar difícil para Haskell inferir correctamente el tipificado correcto en todos los casos. De hecho, es demostrable que en los sistemas al estilo Church, la inferencia de tipos es no decidible.

Debido a ello, hay problemas al tipificar fragmentos como el siguiente:

LiberalTypeSynonyms

En algunas ocasiones, puede resultar de utilidad expandir las definiciones de los alias de tipos, previo a realizar el análisis estático.

RankNTypes

Anteriormente hicimos trampa. Haskell por defecto activa esta extensión.

¿Qué sucede si la desactivamos?

Entendemos el rank de un tipo como:

ImpredicativeTypes