Está en la página 1de 3

Haskell

Los orgenes tericos del modelo funcional se remontan a los aos 30 en los cuales
Church propuso un nuevo modelo de estudio de la computabilidad mediante el clculo
lambda. Este modelo permita trabajar con funciones como objetos de primera clase. En
esa misma poca, Shnfinkel y Curry construan los fundamentos de la lgica
combinatoria que tendr gran importancia para la implementacin de los lenguajes
funcionales.
El clculo lambda es un sistema formal diseado para investigar la definicin de funcin,
la nocin de aplicacin de funciones y la recursin. Fue introducido por Alonzo
Church y Stephen Kleene en la dcada de 1930. Church us el clculo lambda
en 1936 para resolver el Entscheidungsproblem. Puede ser usado para definir de manera
limpia y precisa qu es una "funcin computable
Se puede considerar al clculo lambda como el ms pequeo lenguaje universal de
programacin. Consiste en una regla de transformacin simple (sustitucin de variables) y
un esquema simple para definir funciones.
El clculo lambda es universal porque cualquier funcin computable puede ser expresada
y evaluada a travs de l. Por lo tanto, es equivalente a las mquinas de Turing. Sin
embargo, el clculo lambda no hace nfasis en el uso de reglas de transformacin y no
considera las mquinas reales que pueden implementarlo. Se trata de una propuesta ms
cercana al software que al hardware.
Hacia 1950, John McCarthy dise el lenguaje LISP (List Processing) que utilizaba las
listas como tipo bsico y admita funciones de orden superior. Este lenguaje se ha
convertido en uno de los lenguajes ms populares en el campo de la Inteligencia Artificial.
Sin embargo, para que el lenguaje fuese prctico, fue necesario incluir caractersticas
propias de los lenguajes imperativos como la asignacin destructiva y los efectos laterales
que lo alejaron del paradigma funcional. Actualmente ha surgido una nueva corriente
defensora de las caractersticas funcionales del lenguaje encabezado por el dialecto
Scheme, que aunque no es puramente funcional, se acerca a la definicin original de
McCarthy.
En 1964, Peter Landin dise la mquina abstracta SECD para mecanizar la evaluacin
de expresiones, defini un subconjunto no trivial de Algol-60 mediante el clculo lambda e
introdujo la familia de lenguajes ISWIM (If You See What I Mean) con innovaciones
sintcticas (operadores infijos y espaciado) y semnticas importantes.
En 1978 J. Backus (uno de los diseadores de FORTRAN y ALGOL) consigui que la
comunidad informtica prestara mayor atencin a la programacin funcional con su
artculo Can Programming be liberated from the Von Neumann style? en el que criticaba
las bases de la programacin imperativa tradicional mostrando las ventajas del modelo
funcional. Adems Backus dise el lenguaje funcional FP (Functional Programming) con
la filosofa de definir nuevas funciones combinando otras funciones.

A mediados de los 70, Gordon trabajaba en un sistema generador de demostraciones


denominado LCF que inclua el lenguaje de programacin ML (Metalenguaje). Aunque el
sistema LCF era interesante, se observ que el lenguaje ML poda utilizarse como un
lenguaje de propsito general eficiente.
A mediados de los ochenta se realiz un esfuerzo de estandarizacin que culmin con la
definicin de SML (Stndar ML). Este lenguaje es fuertemente tipado con resolucin
esttica de tipos, definicin de funciones polimrficas y tipos abstractos.
A comienzos de los ochenta surgieron una gran cantidad de lenguajes funcionales debido
a los avances en las tcnicas de implementacin. Entre stos, se podran destacar Hope,
LML, Orwell, Erlang, FEL, Alfl, etc. Esta gran cantidad de lenguajes perjudicaba el
desarrollo del paradigma funcional. En septiembre de 1987, se celebr la conferencia
FPCA en la que se decidi formar un comit internacional que disease un nuevo
lenguaje puramente funcional de propsito general denominado Haskell.
Con el lenguaje Haskell se pretenda unificar las caractersticas ms importantes de los
lenguajes funcionales. Como las funciones de orden superior, evaluacin perezosa,
inferencia esttica de tipos, tipos de datos definidos por el usuario, encaje de patrones y
listas por comprensin. Al disear el lenguaje se observ que no exista un tratamiento
sistemtico de la sobrecarga con lo cual se construy una nueva solucin conocida como
las clases de tipos. El lenguaje incorporaba, adems, Entrada/Salida puramente funcional
y definicin de arrays por comprensin. Durante casi 10 aos aparecieron varias
versiones del lenguaje Haskell, hasta que en 1998 se decidi proporcionar una versin
estable del lenguaje, que se denomin Haskell98, a la vez que se continuaba la
investigacin de nuevas caractersticas y nuevas extensiones al lenguaje.
El nombre del lenguaje se debe a Haskell Brooks Curry. Haskell se basa en el lambda
clculo, por eso se usa lambda como un logo. Haskell es un lenguaje de programacin
moderno, estndar, no estricto, puramente funcional. Posee todas las caractersticas
avanzadas, incluyendo polimorfismo de tipos, evaluacin perezosa y funciones de alto
orden.
Haskell es un lenguaje de programacin funcional. Eso quiere decir varias cosas.
Por un lado, es sinnimo de "minoritario". Por otro lado, le sita en una liga
completamente diferente a la de los lenguajes de programacin con ms
popularidad (C, Java, C#, Python, Ruby...). Haskell no te sirve para traer un plato de
comida a casa, y difcilmente hars tu prxima aplicacin empresarial en este
lenguaje. Pero aun as, si te interesa la programacin, creo que deberas echarle un
vistazo a Haskell. El lenguaje tiene un montn de caractersticas interesantes,
relativamente poco conocidas. Por ejemplo, las funciones de orden superior
(cmo es posible que an no estn disponibles en todos los lenguajes?), la
evaluacin perezosa, las listas, la programacin literaria, la transparencia
referencial, y el encaje de patrones. Algunas de estas caractersticas se empiezan a
filtrar a lenguajes ms populares por ejemplo, Java y Python.

Haskell no tiene mucho uso comercial, ni est en la cresta de la ola de Internet. Sin
embargo, se debe considerar que saber programar en Haskell le har un mejor
programador en general. Pues cuando tenga que disear o programar en otros
lenguajes, aplicara lecciones que he aprendera en Haskell.