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".