Back to flin
flin

Inferencia de tipos Hindley-Milner en un lenguaje personalizado

Cómo FLIN usa la inferencia de tipos Hindley-Milner para determinar tipos sin anotaciones -- implementado en Rust.

Juste A. Gnimavo (Thales) & Claude | March 26, 2026 2 min flin
EN/ FR/ ES
flinrust

FLIN infiere tipos. Escribes count = 0 y el compilador sabe que es un entero. Escribes name = "Juste" y el compilador sabe que es texto. Escribes items = [] y el compilador le asigna un tipo polimórfico que se resolverá cuando añadas el primer elemento. El algoritmo detrás de esto es Hindley-Milner -- un sistema de inferencia de tipos inventado independientemente por Roger Hindley en 1969 y Robin Milner en 1978, y usado en alguna forma por Haskell, OCaml, F#, Rust (parcialmente), y ahora FLIN.

Implementar Hindley-Milner en un lenguaje personalizado es una de esas tareas que suena intimidante y resulta ser sorprendentemente compacta. Todo el motor de inferencia de tipos de FLIN -- unificación, sustitución, generalización, instanciación y polimorfismo let -- cabe en unas 200 líneas de Rust. Se construyó en una sola sesión de 25 minutos. Y funciona.

La base de Hindley-Milner es la variable de tipo. Cuando el compilador encuentra una expresión cuyo tipo no se conoce inmediatamente, crea una variable de tipo nueva -- un marcador como ?T0, ?T1, ?T2. Estas variables se resuelven mediante unificación.

La sesión 8 -- la sesión que implementó Hindley-Milner -- tomó aproximadamente 25 minutos y produjo ~320 líneas de código y 17 pruebas nuevas. 193 pruebas totales pasando.


Esta es la Parte 15 de la serie "Cómo construimos FLIN".

Share this article:

Responses

Write a response
0/2000
Loading responses...

Related Articles

Thales & Claude zerosuite

Funciona, y no está terminado

El director recorrió él mismo todos los canales de senndo — cinco canales, de uno en uno y en campaña, la importación, las estadísticas, un reembolso, la API — y todo respondió. El archivo de seguimiento seguía diciendo que no, y la única línea que bloqueaba no era código: era un documento que había dejado de ser cierto en silencio. Cuatro afirmaciones ciertas al escribirse y falsas al leerse, y las guardas legibles por una máquina que ahora atrapan cada una de esas formas.

12 min Sep 14, 2026
senndocpaaslaunch-readinessdocumentation +8
Thales & Claude zerosuite

El navegador en manos de Claude: manejar el propio Chrome del CEO

Claude-in-Chrome permite que una sesión de Claude Code maneje el navegador real del director — mismo perfil, mismas sesiones abiertas. Qué hace la herramienta en realidad, por qué es mejor que pedirle a una persona que haga clic y lo cuente, y dónde el humano sigue ganando. Anclado en el día en que Claude recorrió un alta de cliente completa en la consola de producción de senndo, con mensajes facturados incluidos.

9 min Aug 18, 2026
claude-in-chromebrowser-automationclaude-codeclaude-fable-5 +9
Thales & Claude deblo

El segfault que no era nuestro: cómo lanzamos el tracking del día de lanzamiento de Déblo en la noche del despliegue — analítica condicionada por entorno, atribución nativa de las tiendas, tres bugs que el compilador no podía ver y un build sin memoria que diagnosticamos en lugar de revertir

El 1 de julio de 2026 — el día del lanzamiento — el riesgo nunca fue el texto. Era que las campañas de pago salieran a ciegas. Este es el build-log de cómo desplegamos la analítica y la atribución de instalaciones de Déblo como código en la noche del lanzamiento: etiquetas GA4, Meta y LinkedIn condicionadas por entorno que se despliegan sin riesgo antes de que existan las cuentas publicitarias; atribución enrutada por los canales nativos de las tiendas en lugar del pixel web; una auditoría adversarial que atrapó tres bugs que tanto el typechecker como el build dieron por buenos; y un despliegue en Easypanel que hizo segfault en el primer build — que demostramos que no era nuestro código antes de tocar una sola línea.

18 min Jul 1, 2026
deblolaunch-dayclaude-opus-4.8claude-code +26