Haskell Hero

Haskell Hero es un manual interactivo del lenguaje Haskell para principiantes.

Trabajamos con un script

Para empezar

Cuando se abre, Hugs carga definiciones de funciones y constantes de la librería Prelude. Esta librería contiene entre otras también definiciones de funciones odd, even, div, mod y de la constante pi. En este momento podemos usar estas funciones.

Queremos que Hugs añada a estas definiciones también nuestras propias definiciones. Si usamos una definición solo una vez, podemos usar las definiciones locales. Sin embargo, si vamos a usar las mismas funciones repetidamente, sería poco práctico escribir la definición local siempre cuando en el código aparece nuestra función. Por eso en este caso vamos a usar definiciones globales guardadas en un script.

Creamos un script

Un script no es nada difícil. El script de Haskell es un archivo de texto con la extensión de archivo .hs.

En Windows abrimos cualquier editor de texto y en el menú elegimos Guardar como... . Como nombre de archivo podemos poner cualquier cosa con la extensión .hs, por ejemplo prueba.hs. En el menú desplegable elegimos la opción Todos los archivos/formatos para que no se añada automáticamente la extensión .txt.

En linux abrimos en el terminal cualquier editor de texto. Aquí mostramos como trabajar con el editor nano. Este editor lo abrimos tecleando nano y pulsando Enter. Un archivo se guarda en el editor pulsando Ctrl + O. Como nombre de archivo ponemos por ejemplo prueba.hs y pulsamos Enter. El editor se cierra pulsando Ctrl + X.

Ahora tenemos listo un script vacío, podemos cargarlo a Hugs y después editarlo.

Cargamos el script a Hugs

En WinHugs tenemos dos opciones como cargar el script a Hugs.

  • Primero, podemos elegir Load modules from specified file en el menú y elegir el archivo.
  • Segundo, podemos cargar el archivo tecleando :load nombre/ruta o en breve :l nombre/ruta.

En linux cargamos un archivo

  • Tecleando :load nombre. También aquí podemos usar la forma breve :l nombre.
  • Abriendo Hugs tecleando en el terminal hugs archivoConScript.hs

    Si la línea de órdenes cambia de Hugs> a Main>, el script fue cargado con éxito y ya podemos usar las definiciones que están en él.

Editamos el script

El script lo vamos a editar en un editor de texto. Abrimos un editor de texto y abrimos el script como un archivo de texto. Si el script ya está cargado a Hugs, podemos empezar a editarlo tecleando :e. Después de editar el script lo guardamos.

Nos queda decir a Hugs que cargue el archivo de nuevo. Lo podemos hacer con el orden :load nombre o con el orden :reload, en breve :r.

Sangrado

Cuando escribimos un script con líneas largas, a menudo es mejor ajustar las líneas. ¿Cómo hacerlo para que Hugs comprenda que la línea nueva no es una línea nueva, sino la línea anterior que continua? Es fácil. Delante de la línea nueva ponemos al menos un espacio. 

Esta es la primera línea.
Esta es la segunda línea
 Y esta línea es la continuación de la segunda línea.

El espacio al principio de la línea no tiene que ser solo uno. Pueden ser más, sin embargo, la línea que continúa siempre tiene que estar más sangrada que la línea anterior. Cuando usamos la expresión if-then-else, el código parece más limpio con la palabra else sangrada más y puesta debajo de la palabra then.

if even 5 then "Sí"
          else "No"

Podemos crear más niveles de sangrado. Por ejemplo cuando usamos condiciones anidadas.

if even 5 then "Sí"
          else if 7 < 9 then "Sí"
                        else "No"

En este caso se evalúa primero la condición even 5 cuyo resultado es False. Este significa que toda la expresión se evalúa a la parte de la expresión detrás de else.

if 7 < 9 then "Sí"
         else "No"

La condición 7 < 9 se evalúa a True así que toda la expresión se evalúa a "Sí".