Los combinadores de parsers son funciones que toman una cadena de entrada y devuelven un valor analizado junto con la cadena restante sin procesar. Un Parser<T> se define como (input: string) => [T, string]. Por ejemplo, p Integer analiza "10 20 30" como el número 10 y el resto " 20 30". p Hello extrae "Hello" de "Hello 100", dejando " 100". p Ignore Whitespace consume los espacios, devolviendo " " y "100". Luego, p Integer analiza "100" como el número 100 y una cadena vacía.
Los combinadores de secuencia como p Seq permiten combinar parsers: p Seq(p Hello, p Ignore Whitespace, p Integer) analiza "Hello 100" como la tupla ["Hello", null, 100]. El combinador p Map transforma los valores analizados, por ejemplo, convirtiendo ["Hello", null, 100] en {greeting: "Hello", who: 100}. De forma similar, p Seq(p Number, p Semicolon) analiza "10;20;30;" como una lista de números aplicando repetidamente el parser para consumir cada par número-punto y coma.
El artículo también ilustra el análisis de la salida de un ping de red, mostrando cómo se pueden extraer datos estructurados de texto sin formato usando estos combinadores. Las operaciones fold y unfold demuestran cómo los parsers pueden reducir o reconstruir valores, como sumar una lista o convertir "Hello 100" en ["Hello", " ", 100] y viceversa.
Fuente: Hacker News · Resumido por HeadlinesBriefing