Algo pasa con Haskell

Indudablemente existe un sinnúmero de lenguajes de programación sobre los que podemos poner nuestra mirada. No obstante, solo unos pocos están llamados para la gloria. Existen múltiples cuestiones por las que un lenguaje ha de ser escogido sobre otros, así como, hay muchas situaciones diferentes que recomiendan emplear unos y no otros.

Como lenguaje de propósito general que tenga una comunidad de usuarios con determinada relevancia, Haskell es de los pocos lenguajes que tiene peculiaridades que divergen enormemente del resto de lenguajes. En las próximas líneas, procuraré entregar mi y subjetiva visión del actual panorama del ecosistema Haskell, siempre y en toda circunstancia desde cierto punto de vista práctico y pragmático, y de paso, entregar unas pinceladas sobre lo que he podido entrever es, la programación funcional.

¿Haskell?

Haskell es un lenguaje de programación del que resaltaría las próximas características:

Es perezoso: por defecto, cualquier expresión (en una definición) no es evaluada hasta el momento en que su valor es requerido. Este término tan simple tiene unas implicaciones enormes y verdaderamente sorprendentes. En la práctica, este hecho resulta en la recomendación de que el programador piense en concepto de computaciones en vez de código, de manera que quede nítidamente claro que al delimitar la lista [3 * cuatro, seis * cinco, 1 2] no tenemos la lista [12, treinta, 3], sino más bien 3 expresiones que van a poder o bien no estar evaluadas cuando su valor se requiera. No te dejes mentir por la simplicidad de este mecanismo y no pierdas la ocasión de conocer intrigantes formas de sacarle partido.
Sostiene la transparencia referencial: cualquier expresión en Haskell cumple la transparencia referencial esto es, dada una expresión, por compleja que sea, siempre y en todo momento va a poder ser reemplazada por su valor al valorarla. Lo precedente es equivalente a decir que cualquier expresión en Haskell siempre y en todo momento siempre y en toda circunstancia va a devolver el mismo valor y que por ende, no está tolerada no hay ninguna función que, por servirnos de un ejemplo, devuelva un número azaroso o bien lea de disco pues estas 2 operaciones pueden devolver valores diferentes toda vez que son evaluadas. Otra vez, es posible que te resulte simple e inclusive limitado, mas nuevamente esta característica te deja manipular estructuras con un nivel de abstracción sorprendente.
El sistema de tipos: Haskell incorpora un sistema de tipos basado en el polimorfismo Hindley-Milner ampliado con un sistema de clases de tipos (Type classes) que no guarda relación con las clases de la POO. Al revés que las 2 peculiaridades precedentes, fáciles de comprender mas con enormes implicaciones, el sistema de géneros de Haskell ni es fácil, ni sus implicaciones son tan trascendentales (¡siéndolo!). Incluso de este modo es tal que, una vez te habitúas a él, lo hechas de menos en el resto de lenguajes. Creo que es el sistema de tipos el que da cohesión a las 2 precedentes y juntas las 3, marcan una diferencia radical en frente de otros lenguajes que aceptan evaluación vaga y aceptan transparencia referencial.

Desde cierto punto de vista emotivo, Haskell pudiese ser considerado como el portaestandarte de los lenguajes que nos prometía la serie de artículos Programación imperativa versus declarativa en su variación funcional, mas desde cierto punto de vista práctico, vamos a ver en las próximas líneas que el demonio está en los detalles.

Aprendiendo Haskell

Comentan los profesores que la educación de Haskell es más suave en aquellos pupilos que jamás ya antes hayan tenido contacto con lenguajes de programación,

en el sentido de que los segundos adquieren las malas costumbres y pensamientos impuros de los lenguajes imperativos (déjame que insista con la serie Programación imperativa versus declarativa si quieres ahondar en el tema).

Yo jamás he enseñado Haskell a absolutamente nadie, con lo que solo puedo charlar por mi mismo, mas ciertamente, cuando hace unos cuatro años andaba aburrido de la ineludible monotonía de los lenguajes, en mi busca del Santurrón Grial me encontré con Haskell. Una disrupción mental sacudió mi cerebro y fue el reto, la complejidad, la curiosidad que me hizo seleccionar a este sobre otros lenguajes aspirantes (Scala, Clojure y F# particularmente).

Sí, afirman que la curva de aprendizaje es más acusada en Haskell que en otros lenguajes y en mi caso de esta forma ha sido (exquisitamente acusada), mas asimismo es verdad que, ¿no es razonable que de esta manera sea si ya tenemos desfigurado nuestro cerebro con estrategias imperativas?.

Ha llovido mucho desde el instante en que dejé la Universidad, mas en ellas jamás oí charlar de Haskell y tan solo los honorables Lisp y Prolog entraban a hurtadillas en el plan de estudios. Por fortuna semeja que eso ha ido mudando desde ese momento y son múltiples las universidades y enseñantes (del que me agradaría resaltar a José A. Alonso del Dpto. de Ciencias de la Computación y también Inteligencia Artificial de la Universidad de Sevilla) que efectúan un esmero para sostener viva la plasticidad de las psiques de sus pupilos.

No te quiero mentir, a mi me resultó (y resulta) bien difícil, mas eso es exactamente lo que me divierte y motiva.

Haskell en las trincheras

Muchos programadores tienen lenguajes fetiche, lenguajes de los que gozan, mas que no los emplean de forma profesional. Con cierta frecuencia Haskell es uno de ellos.

Una vez has remontado la hercúlea pendiente y te sientes cómodo entre mónadas y functores, sería imprudente emplearlo profesionalmente sin ya antes hacerse el interrogante de si Haskell es un lenguaje útil, práctico para desarrollar nuestras soluciones.

Últimamente Gabriel Gonzalez detalló el State of Haskell ecosystem de las que resaltaré las que, siempre y en toda circunstancia bajo mi punto de vista, son las más relevantes:

IDE support: a mi siempre y en toda circunstancia me han agradado los IDE, desde el vetusto Turbo C de Borland, siempre y en toda circunstancia he sabido querer las comodidades que un buen IDE provee. Haskell adolece de una solución que pueda satisfacer, sobre todo, a aquellos que se comienzan en el lenguaje. Particularmente utilizo vim, por el hecho de que me deja trabajar de forma cómoda de forma recóndita, emacs podría ser la opción alternativa conveniente y está Leksah programado en Haskell mas que no acaba de enganchar. No, a mi parecer no hay una solución conveniente y debes tunearte por tu cuenta un ambiente de trabajo que te resulte cómodo.
Standalone GUI applications: si te propones desarrollar este género de aplicaciones, el inconveniente se aguza y deberías examinar bien la arquitectura a emplear si tu aplicación va a tener un tamaño notable.
ARM processor support: Haskell tiene soporte para Windows y Linux sobre x86_64 y también i686 mas adolece de formas robustas de desarrollar para otras plataformas (particularmente para Android y también iOS). Aunque es verdad que es posible repartir para todas y cada una (incluidas Raspberry y Arduino).

Verdaderamente ninguna de las precedentes tiene una enorme relevancia, mas sí es verdad que sobre todo para front-end semeja aconsejable que si nuestro sistema tendrá un tamaño considerable, empleemos ambientes con un tooling más productivo.

Mi conclusión es que hoy día Haskell es una fabulosa opción si tu equipo de desarrollo está capacitado y lo empleas para la una parte de negocio. El despliegue es trivial (alén de tu arquitectura), las dependencias nulas y consumos de recursos de servidor ajustadísimos.

¿Es Haskell el futuro?

Lamentablemente y a mi juicio, no. No creo que se vuelva mainstream a corto o bien medio plazo, si bien asimismo creo que siempre y en toda circunstancia va a ser una alternativa apreciada y utilizada por muchos desarrolladores y empresas. Este hecho es un condicionante fundamental para muchos, puesto que limita la cantidad de soporte y tooling respecto de otras soluciones, incluso cuando proporcionalmente, a mi juicio, está de forma notable sobre otras. Desgraciadamente el contexto actual hace que, popularmente, las cosas negativas de Haskell tengan más peso que las positivas.

En cualquier caso y sin titubear, sea por curiosidad, pues te agradan los desafíos (Functional pearls) o bien simplemente para tener una visión mejor de lo que significa ser programador, te invito a que ¡aprendas Haskell por el bien de todos!.

Asimismo te invitamos a

Recopilatorio del Hello World en diferentes lenguajes de programación, más de cuatrocientos ejemplos

El inconveniente de ver mal la pantalla de tu portátil desde diferentes ángulos es ya historia

Pliegues, una forma de encapsular las iteraciones en listas

– La nueva

Algo pasa con Haskell

fue publicada originalmente en

turincon.net

por
Jose Juan

.