Inferencia de tipos para la concatenación sesgada de registros: del paper de Wand al código

Fuentes: Mechanized type inference for record concatenation

Este artículo técnico presenta una formalización práctica del algoritmo de inferencia de tipos para la concatenación sesgada de registros descrito por Mitchell Wand en 1991, un problema que, casi cuarenta años después, ningún lenguaje de programación había logrado implementar de forma fiel. El autor, que desarrolla un comprobador de tipos y servidor de lenguaje para Nix, identifica este operador (//) como uno de los tres grandes retos de la inferencia de tipos en Nix, junto con los imports computados y las listas polimórficas.

La concatenación sesgada de registros combina dos registros prefiriendo los campos del segundo si hay solapamiento, y es la pieza que hace posible el "late binding" de dependencias en Nixpkgs: permite sobrescribir un paquete para que todos los dependientes lo recojan de forma automática. Esta capacidad resulta crítica frente a los ataques a la cadena de suministro, ya que garantiza que un parche o actualización propague a toda la cadena.

El artículo explica por qué los lenguajes existentes (Dhall, TypeScript, Flow) solo pueden inferir tipos "hacia delante" y requieren anotaciones, mientras que PureScript logra mayor generalidad pero con un enfoque distinto. A partir del concepto de "dominio" de las variables de fila del paper de Wand, el texto describe los tres casos de unificación (registros cerrados, registros abiertos y registros mixto-abierto), introduce la noción de instanciación de campos para igualar los campos explícitos de dos registros y define la notación formal de campos potenciales (presentes, ausentes o desconocidos). Además, se acompaña de una implementación de referencia en Haskell de unas 400 líneas y de un repositorio en GitHub para probarla, con el objetivo de acercar la teoría a una traducción mecánica a código y avanzar hacia sistemas de tipos inferidos más expresivos en lenguajes prácticos.