Haskell
Un lenguaje puramente funcional con evaluación perezosa y un sistema de tipos estático y fuerte.
27 pasos en 1 tours, desde lo básico hasta programas completos.
Los tours
- Primera versión
- 1990
- Creado por
- The Haskell Committee
- Tipado
- Estático e inferido; puro por defecto, perezoso por defecto, los efectos en los tipos
- Los fragmentos siguen
- GHC 9.14
- Extensiones de archivo
- .hs, .lhs
Para qué sirve
Haskell es la fábrica de donde salen las ideas: la inferencia de tipos, las clases de tipos, las mónadas, la evaluación perezosa y las pruebas basadas en propiedades se resolvieron aquí antes de que Rust, Swift, Scala y TypeScript importaran las partes usables. Bancos y firmas de trading (Standard Chartered, Bitnomial), la verificación de hardware y compiladores de otros lenguajes (PureScript, Elm, Agda) corren sobre él en producción, casi siempre donde equivocarse sale caro.
La experiencia diaria es una conversación con el compilador: escribes una firma de tipo, el compilador te señala cada lugar donde el programa no cuadra, y refactorizar es seguir los errores hasta que se acaben. La pureza significa que la firma de una función te dice todo lo que puede hacer — IO aparece en el tipo o la función no puede ejecutarlo — y por eso 'si compila, entonces funciona' es un chiste recurrente con una cantidad inusual de verdad adentro.
Las barreras famosas — la pereza, las mónadas, un ecosistema que da por sentado que lees artículos — son más chicas que su fama dentro del núcleo GHC2021 que ejercitan estos fragmentos: ecuaciones, coincidencias de patrones, folds, tipos de datos algebraicos y notación do. Lo que enseña ese subconjunto se transfiere a todos lados: cada Optional, cada Result, cada encadenamiento de map/filter/reduce y cada switch exhaustivo de una base de código moderna es Haskell con el número de serie limado.
De dónde viene
A fines de los años ochenta una docena de grupos de investigación tenía cada uno su propio lenguaje funcional perezoso, y ninguno tenía usuarios. Una reunión de 1987 en la conferencia FPCA nombró un comité para definir un solo lenguaje común; Haskell 1.0 — que lleva el nombre del lógico Haskell Curry — apareció en 1990, con un reporte que deliberadamente no pertenecía a ninguna empresa ni laboratorio.
El reporte de 1998 ('Haskell 98') congeló un núcleo estable, y el Glasgow Haskell Compiler pasó a ser la implementación de facto, con un sistema de extensiones donde aterrizaba primero la investigación nueva sobre sistemas de tipos. Los artículos de Simon Peyton Jones y Philip Wadler de esa época — las mónadas para IO, las clases de tipos — convirtieron maquinaria académica en ingeniería que funciona, y 'evitar el éxito a toda costa' quedó como la declaración de principios socarrona de la comunidad.
GHC2021 empaquetó dos décadas de extensiones ya asentadas en un conjunto por defecto moderno, y el lenguaje se profesionalizó sin ruido: una fundación, una cadencia estable de versiones y usuarios industriales que lo eligieron a propósito. Su papel de laboratorio de investigación sigue — los tipos lineales y los tipos dependientes llegan por el mismo pipeline que en su momento entregó las mónadas — mientras sus exportaciones siguen apareciendo en las notas de versión de todos los lenguajes masivos.
Cómo se siente teclearlo
Haskell se teclea en ráfagas cortas con mucho tráfico de operadores: :: y -> en cada firma, $ y . encadenando llamadas, <- y = en los bloques do, y backticks que vuelven infija a una función. Hay casi nada de paréntesis comparado con un Lisp y casi nada de llaves comparado con un C, pero la indentación carga peso — las cláusulas where y los bloques do tienen que alinearse exacto, y la alineación de los fragmentos es parte del ejercicio. Ojo con el apóstrofo de nombres como total' — legal, idiomático y fácil de perder.
27 pasos en 1 tours, desde lo básico hasta programas completos.