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.hsen 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 buildEsto 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 testEn el caso de que tengas inconvenientes en Win10 y no encuentres el ejecutable una vez instalado, podés probar
stack build intero --copy-compiler-toolFinalmente, 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 runNos 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 1Nos 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 1Nos 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 1siga 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.