Los registros anónimos —estructuras de datos con campos identificados por nombre que no requieren una declaración previa de tipo— son habituales en lenguajes dinámicos como JavaScript (objetos), Python (diccionarios), Ruby (hashes) o Nix (attribute sets), y también aparecen en el formato JSON. Sin embargo, los lenguajes estáticamente tipados suelen reservar los registros con nombre para los tipos de datos declarados explícitamente, como en Haskell, donde un registro exige definir un data type. Lenguajes como TypeScript, C# y PureScript sí permiten registros anónimos y conservan la verificación de tipos en tiempo de compilación.
El artículo explica paso a paso cómo funciona la inferencia de tipos para estos registros. Primero define una sintaxis abstracta mínima para expresiones (booleanos, cadenas, números y campos) y otra paralela para tipos (los correspondientes más el tipo registro). A partir de ahí, presenta reglas de inferencia elementales: una literal booleana se infiere como BooleanType, una cadena como StringType y un número como NumberType. Para un literal de registro, la regla consiste en inferir el tipo de cada campo por separado y combinarlos en un RecordType; por ejemplo, { name: "Alice", age: 25 } produce RecordType { name: StringType, age: NumberType }.
El texto añade después la operación de acceso a un campo mediante notación punto. Para ello amplía la sintaxis de expresiones con FieldAccess e introduce una regla que exige, primero, inferir el tipo de la expresión receptora; si es un RecordType, se busca el campo solicitado y se devuelve su tipo. Esta regla es la primera que puede fallar: devuelve error si la expresión no es un registro o si el campo no existe. El autor ilustra el proceso con derivaciones formales y su equivalente en Haskell, y muestra cómo verificarlo en el REPL.
El post sienta las bases para una entrega posterior centrada en la inferencia de tipos para registros anónimos polimórficos, un campo que la teoría de tipos resolvió hace más de tres décadas y que la industria del software todavía no ha adoptado de forma generalizada.
