Merece la pena aprender Haskell
(This is a reprint of the original post)
Haskell es un lenguaje de programación funcional. Eso quiere decir varias cosas. Por un lado, es sinónimo de "minoritario". Por otro lado, le sitúa en una liga completamente diferente a la de los lenguajes de programación con más tirón (C, Java, C#, Python, Ruby...). Aprendí Haskell en la asignatura de Programación Lógica y Funcional con Labra. Honestamente, Haskell no te sirve para traer un plato de comida a casa, y difícilmente harás tu próxima aplicación empresarial en este lenguaje. Pero aún así, si te interesa la programación, creo que deberías echarle un vistazo a Haskell. El lenguaje tiene un montón de características interesantes, relativamente poco conocidas. Por ejemplo, las funciones de orden superior (¿cómo es posible que aún no estén disponibles en todos los lenguajes?), la evaluación perezosa, las listas intensionales, la currificación, la programación literaria, la transparencia referencial, el encaje de patrones y las guardas. Algunas de estas características se empiezan a filtrar a lenguajes más populares (por ejemplo, Python tiene algunas de ellas). El sistema de tipos de Haskell es el mejor sistema de tipos que conozco, con sus tipos de datos algebraicos, su inferencia de tipos con comprobación estática y sus clases de tipos. Este es un campo que conozco bien, ya que mi proyecto Zinc trató precisamente con el sistema de tipos (en otro lenguaje derivado de Haskell).
En Haskell se pueden escribir programas muy hermosos, de cuyo código puedes sentirte orgulloso. Por desgracia, no siempre es así, y las cuestiones no funcionales (entrada/salida, por ejemplo) se tratan mediante mónadas, que ya no son tan bonitas (bueno, al menos esa es mi opinión. Creo que hay quien las encuentra igualmente bellas). Por ejemplo, generar números aleatorios es un jaleo.
Como decía, Haskell no tiene mucho tirón comercial, ni está en la cresta de la ola de Internet. Sin embargo, considero que saber programar en Haskell me ha hecho un mejor programador en general. Cuando tengo que diseñar o programar en otros lenguajes, aplico lecciones que he aprendido en Haskell. Cuando me encuentro un nuevo lenguaje que debo aprender, lo relaciono con características que ya he visto en Haskell. Hay un lenguaje funcional que actualmente tiene bastante importancia, y es XSLT. Curiosamente, a mi me resulta muy fácil gracias a mi experiencia con Haskell, pero a mucha gente se le atraganta.
Si he conseguido despertar el interés de alguno, es muy fácil empezar con Haskell. Se puede descargar de su página web, y en Debian es tan fácil como apt-get install ghc6 hugs (un compilador y un intérprete, según gustos). Además de la documentación de la web, Labra tiene un tutorial en español, muy recomendable.
Por cierto, mientras recopilaba enlaces para este artículo, he encontrado que alguien ha metido en la Wikipedia una referencia a Zinc, aunque sólo sea una línea y ni siquiera tenga un enlace. Obviamente, me ha hecho ilusión leerlo.