Taller de Haskell - Agosto 2019
Este taller intenta ser una introducción de cero-a-algo al lenguaje de programación funcional Haskell, es decir que el único pre-requisito para hacerlo es saber programar.
El taller consiste de dos partes:
- Vamos a tener una introducción super veloz al lenguaje, su sintaxis y libreria estandard
siguiendo el archivo
Intro.hs
en la carpetasrc/
. - Formando grupos de 2 o 3 (aunque no es obligatorio, recomendamos hacerlo de al menos dos) vamos a implementar un cliente super simple de linea de comandos para la API de TheMovieDB.
Para usar la API necesitamos una API key
api_key = "2ba61b38c35668c26d754910aac7a729"
Vas a necesitar una computadora para hacer el ejercicio.
En principio, como el taller está pensado para hacer de a pares capaz no es necesario que traigas tu compu personal si ya sabes con quien vas a trabajar, pero estaría bueno igual.
Sea el caso que no tengas acceso a una computadora, contactate con los organizadores y vemos que podemos hacer.
Asumimos que tenes idea de como usar git, pero por si las moscas:
https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
stack
es el package manager y orquestador de compilación de Haskell. Vamos a necesitar tenerlo instalado.
Las instrucciones para eso se encuentran aquí:
http://docs.haskellstack.org/en/stable/install_and_upgrade/
Haskell es raro. No comparte casi nada con ningún lenguaje conocido, pero no por eso es mas difícil!
Como el proyecto usa varias librerias, y las mismas pueden ser pesadas, recomendamos fuertemente instalarlas en sus casas antes de venir al taller. Para esto deben correr:
git clone https://github.com/BsAsHaskell/workshop-1
cd workshop-1
stack setup
stack build
Esto puede tardar un buen rato. Si todo sale bien, vas a ver algo del estilo:
haskell-workshop-0.1.0.0: copy/register
Installing library in /Users/clrnd/Src/haskell-workshop/.stack-work/install/x86_64-osx/lts-12.10/8.4.3/lib/x86_64-osx-ghc-8.4.3/haskell-workshop-0.1.0.0-4RGcRuf1daA1fbO4MfLutr
Installing executable pelis in /Users/clrnd/Src/haskell-workshop/.stack-work/install/x86_64-osx/lts-12.10/8.4.3/bin
Registering library for haskell-workshop-0.1.0.0..
Y deberian poder correr el ejecutable:
stack run
> pelis: Not implemented...yet!
Intero es una herramienta que te permite habilitar el uso interactivo de Haskell para detectar errores y conocer información del programa que estás escribiendo (como los tipos de cada expresión). Para instalarlo, recomendamos pararte en la carpeta del taller y correr:
stack build intero
stack test
En el caso de que tengas inconvenientes en Win10 y no encuentres el ejecutable una vez instalado, podés probar
stack build intero --copy-compiler-tool
Finalmente, en Visual Studio Code instalás el plugin Haskero y listo!
Vamos a aprender lo básico de Haskell siguiendo el archivo src/Intro.hs.
Vamos a implementar una aplicación de terminal que consulte la API de TheMovieDB.
Queremos que si hacemos:
stack run
Nos traiga la persona con ID 54693 e imprima en la consola su nombre y fecha de nacimiento.
El endpoint correspondiente es: http://api.themoviedb.org/3/person/[id]?api_key=[key]
Podemos usar el código que hay en Librerias.md
para el data type Actriz
.
Queremos que si hacemos:
stack run 1
Nos traiga la persona con ID 1 e imprima lo mismo que antes.
El endpoint correspondiente es el mismo que antes.
La función de Haskell para obtener los argumentos de consola
es getArgs
y se consigue importando System.Environment
.
Queremos que si hacemos:
stack run pelicula 1
Nos traiga la pelicula con ID 1 e imprima su titulo y descripción.
El endpoint correspondiente es: http://api.themoviedb.org/3/movie/[id]?api_key=[key]
¡Ojo! Hay que modificar el comando para que si hacemos
stack run persona 1
siga andando como antes.
Hasta ahora estamos usando el Show
por defecto que nos genera Haskell.
Ahora queremos implementar uno nosotros.
Por ejemplo:
instance Show Actriz where
show actriz = ...
Queremos que si hacemos:
stack run buscar "back to the future"
Nos imprima los títulos y la descripción de cada resultado en la pantalla.
El endpoint correspondiente es: http://api.themoviedb.org/3/search/movie/?api_key=[key]&query=[busqueda]
Si te gustó y queres seguir aprendiendo, te dejamos unos links:
- http://haskellbook.com/ - El libro mas recomendado por la comunidad actualmente. Actualizado y con un enfoque práctico.
- http://learnyouahaskell.com/ - Una introducción un poco menos dura pero también menos industrial.
- https://github.com/bitemyapp/learnhaskell - Una colección de muchos recursos interesantes.
- Haskell Is Easy - Una guia corta para arrancar con Haskell.