Haskell es un caso especial entre los lenguajes de pro­gra­ma­ción fu­n­cio­na­les: desde la de­fi­ni­ción de la primera versión en 1990, Haskell se considera el estándar de facto del paradigma de pro­gra­ma­ción funcional. No es coin­ci­de­n­cia que muchos otros lenguajes fu­n­cio­na­les sigan el modelo de Haskell. Aprender a programar en Haskell puede ser una ex­pe­rie­n­cia fru­s­tra­n­te al principio, sobre todo porque cuesta aco­s­tu­m­brar­se a los conceptos de la pro­gra­ma­ción funcional. Sin embargo, una vez superados los primeros ob­s­tácu­los, hasta los usuarios más novatos pueden avanzar con éxito en el mundo de la pro­gra­ma­ción Haskell.

En este tutorial de Haskell, te pre­se­n­ta­re­mos paso a paso cómo aprender a programar en Haskell de forma sencilla, cómo instalar el lenguaje funcional y cómo funciona exac­ta­me­n­te la pro­gra­ma­ción en Haskell.

Cómo instalar e iniciar Haskell

Como con muchos otros lenguajes de pro­gra­ma­ción, Haskell ofrece muchas po­si­bi­li­da­des para trabajar en tu sistema. Si quieres aprender Haskell o programar de forma cómoda, la solución más habitual es GHCi, un entorno de de­sa­rro­llo in­ter­ac­ti­vo y listo para usar, que está di­s­po­ni­ble en co­m­bi­na­ción con el Glasgow Haskell Compiler. Además del co­m­pi­la­dor, se necesitan bi­blio­te­cas Haskell, que a su vez requieren software de co­n­s­tru­c­ción como Cabal o Stack.

Nota

La co­n­s­tru­c­ción general del co­m­pi­la­dor de Haskell y la apli­ca­ción de co­n­s­tru­c­ción co­rre­s­po­n­die­n­te también forman parte de la pla­ta­fo­r­ma de Haskell.

Para empezar de la forma más rápida posible, debes in­s­ta­lar­te la pla­ta­fo­r­ma completa de Haskell. Los archivos de in­s­ta­la­ción listos para usar en Windows, macOS y varias di­s­tri­bu­cio­nes de Linux (in­clu­ye­n­do in­s­tru­c­cio­nes) se pueden descargar de forma gratuita, en el sitio web oficial del proyecto Haskell.

En los sistemas Linux también puedes elegir la ruta de in­s­ta­la­ción a través del ad­mi­ni­s­tra­dor de paquetes. Si eres usuario de Ubuntu o Debian, escribe el siguiente comando en el terminal:

sudo apt-get install haskell-platform

Una vez co­m­ple­ta­da la in­s­ta­la­ción, deberías poder iniciar el entorno de de­sa­rro­llo in­ter­ac­ti­vo cuando lo desees con el comando “ghci” desde la línea de comandos de tu sistema: en Windows, por ejemplo, a través de Po­we­r­She­ll, que también se re­co­mie­n­da para la in­s­ta­la­ción.

Nota

Ten en cuenta que las versiones de la pla­ta­fo­r­ma Haskell en los sistemas de gestión de paquetes no siempre están ac­tua­li­za­das. Es posible que tengas que ac­tua­li­zar los archivos de in­s­ta­la­ción.

Aprender a programar en Haskell: entender los tipos de datos básicos

Haskell es un lenguaje puramente funcional, lo que lo hace mucho más in­ter­ac­ti­vo e in­te­li­ge­n­te que otros lenguajes de pro­gra­ma­ción. Los tipos de datos como números, ca­ra­c­te­res o valores lógicos (booleanos) ya están pre­de­fi­ni­dos en Haskell o, al menos, có­mo­da­me­n­te de­s­glo­sa­dos por la memoria del ordenador.

Números en Haskell

Haskell in­te­r­pre­ta los números naturales como tales. Esto significa que, en el código de Haskell, no es necesario indicar que una entrada es un número. Al iniciar el entorno de de­sa­rro­llo, puedes realizar cálculos uti­li­za­n­do los ope­ra­do­res ha­bi­tua­les como más (+) o menos (-). Por ejemplo, escribe “2+2” y confirma la entrada pulsando “Intro”:

Prelude> 2+2

Haskell presenta entonces el resultado de este cálculo ma­te­má­ti­co: 4.

Letras en Haskell

Haskell también puede gestionar letras de forma in­te­li­ge­n­te, como te mostramos en este tutorial de Haskell: primero, ponemos la opción “:t” en el comando. Esto asegura que la línea de comandos imprima el tipo de datos después de confirmar el comando. Después de un espacio, inserta cualquier letra entre comillas simples o dobles y confirma con “Intro”.

Prelude>:t "a"

El resultado de salida en este caso es co­rre­c­ta­me­n­te “[Char]”, abre­via­tu­ra de la palabra inglesa character (en ca­s­te­llano, “letra”).

Cadenas de ca­ra­c­te­res en Haskell

Haskell puede también reconocer cadenas de ca­ra­c­te­res, conocidas en los lenguajes de pro­gra­ma­ción como strings, sin ningún problema. En este caso, tampoco se necesita una sintaxis es­pe­cí­fi­ca: basta con poner la re­s­pe­c­ti­va cadena entre comillas. La siguiente entrada, compuesta por números y letras, nos sirve de ejemplo:

Prelude>:t "12345abcde"

Al indicar la opción “:t”, en la salida Haskell indicará de qué tipo de datos se trata. Al igual que cuando es una sola letra, la línea de comandos mostrará “[Char]”.

Aprender Haskell: pre­se­n­ta­ción de los ope­ra­do­res más im­po­r­ta­n­tes

En la sección de números, ya hemos señalado que en Haskell se pueden utilizar sin problemas los ope­ra­do­res ma­te­má­ti­cos más comunes: suma, resta, división y mu­l­ti­pli­ca­ción. También es posible utilizar el operador de secuencia o rango para el listado simple de valores co­n­se­cu­ti­vos.

Nota

Para ejecutar y presentar los re­su­l­ta­dos de los si­guie­n­tes fra­g­me­n­tos de código de este tutorial de Haskell, se utiliza el entorno de de­sa­rro­llo web Online Haskell Compiler.

Sumas en Haskell

El operador de suma para sumar dos o más valores también se re­pre­se­n­ta clá­si­ca­me­n­te en Haskell con el signo más (+). En el siguiente ejemplo de código, que in­se­r­ta­re­mos en el archivo main.hs, uti­li­za­mos la expresión “let” para añadir dos variables (“var1” y “var2”). La línea de comandos presenta el resultado en forma de un mensaje de texto definido en la expresión “putStrLn”:

main = do 
let var1 = 2 
let var2 = 3 
putStrLn "El resultado de la suma de las dos cifras es:"
print(var1 + var2)

En la he­rra­mie­n­ta online me­n­cio­na­da an­te­rio­r­me­n­te, la entrada (ventana izquierda) y la salida (ventana derecha) tienen este aspecto:

Restas en Haskell

Si quieres que Haskell reste un valor numérico de otro, utiliza el operador clásico de su­s­tra­c­ción, expresado con el signo menos (-). Del anterior ejemplo del tutorial de Haskell para la suma, solo tenemos que cambiar el operador y el mensaje de salida:

main = do 
let var1 = 2 
let var2 = 3 
putStrLn "El resultado de la resta de las dos cifras es:" 
print(var1 - var2)
Nota

Haskell también utiliza los símbolos típicos para los ope­ra­do­res de división y mu­l­ti­pli­ca­ción: Con la barra o barra inclinada (/) puedes dividir valores, mientras que con el carácter asterisco (*) indicas a Haskell que mu­l­ti­pli­que los valores.

Listas de valores en Haskell

El operador de secuencia es un operador especial de Haskell. Te permite declarar un listado con una secuencia de valores. Se ide­n­ti­fi­ca mediante “[...]”. Por ejemplo, si quieres que Haskell muestre todos los números del 1 al 10, puedes indicar la entrada “[1..10]” para este rango de números. Puedes hacer lo mismo con las letras. Por ejemplo, con “[a..z]”, se re­pre­se­n­ta el alfabeto. Aquí mostramos un ejemplo simple para el operador de secuencia:

main :: IO()
main = do
print [1..10]

Haskell: cómo declarar y definir funciones

Haskell es un lenguaje puramente funcional. Por esto, no es so­r­pre­n­de­n­te que las funciones de­sem­pe­ñen un papel destacado en la pro­gra­ma­ción con Haskell. Este, como otros lenguajes, emplea su propia manera de declarar y definir funciones.

Nota

La de­cla­ra­ción de una función indica al co­m­pi­la­dor que cierta función existe. También indica que se esperan de­te­r­mi­na­dos pa­rá­me­tros y cómo debe ser el resultado. La de­fi­ni­ción de una función es la in­te­gra­ción real de la función en el código.

Para mostrar de forma clara el principio funcional de Haskell en este tutorial, veremos de nuevo un ejemplo de código:

add :: Integer -> Integer -> Integer   --function declaration
add x y =  x + y                       --function definition
main = do 
putStrLn "La suma de ambos números es la siguiente:"
print(add 3 5)    --calling a function

En la primera línea del código se declara la función; los tres valores de la función (entrada y salida) son enteros. En la segunda línea se define la función: se añaden los dos ar­gu­me­n­tos “x” e “y”. Con el ya conocido método “main”, se compila el código y se obtiene el resultado de la función para los dos valores de entrada “3” y “5”.

El siguiente tutorial de YouTube para pri­n­ci­pia­n­tes pro­fu­n­di­za en el trabajo con funciones en Haskell:

AtsPtAf2avQ.jpg Para mostrar este video, se requieren cookies de terceros. Puede acceder y cambiar sus ajustes de cookies aquí.

Más consejos para aprender a programar en Haskell

Haskell es un lenguaje muy popular, por lo que en internet se pueden encontrar muchos recursos de ayuda en forma de manuales en línea, tu­to­ria­les y foros de apoyo. Re­co­me­n­da­mos, por ejemplo, la serie de tu­to­ria­les de YouTube Haskell for Im­pe­ra­ti­ve Pro­gra­m­me­rs de Philipp Ha­ge­n­lo­cher, que resume los co­m­po­ne­n­tes más im­po­r­ta­n­tes del lenguaje funcional en más de 30 vídeos con di­fe­re­n­tes temas. La comunidad de la página oficial de Haskell contiene también numerosos recursos y ayuda. Si prefieres la letra impresa, puedes encontrar el libro Haskell from the very beginning de John Whi­ti­n­g­ton.

Si utilizas el entorno de de­sa­rro­llo in­ter­ac­ti­vo ghci, puedes también mostrar un resumen completo de los comandos di­s­po­ni­bles en todo momento mientras aprendes a programar en Haskell. Solo tienes que escribir este comando en la línea de comandos y confirmar la entrada con la tecla “Intro”:

Prelude>:?
Ir al menú principal