Home

Awesome

1er Taller de Haskell

Taller de Haskell - Agosto 2019

Introducción

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:

  1. Vamos a tener una introducción super veloz al lenguaje, su sintaxis y libreria estandard siguiendo el archivo Intro.hs en la carpeta src/.
  2. 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.

API key

Para usar la API necesitamos una API key

api_key = "2ba61b38c35668c26d754910aac7a729"

Preparación

Requisitos

una compu

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.

git

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

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/

una mente abierta

Haskell es raro. No comparte casi nada con ningún lenguaje conocido, pero no por eso es mas difícil!

Instalación

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!

(Opcional) Intero con VSCode

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!

Intro

Vamos a aprender lo básico de Haskell siguiendo el archivo src/Intro.hs.

Cliente

Vamos a implementar una aplicación de terminal que consulte la API de TheMovieDB.

1. Buscar una persona desde un ID harcodeado

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.

2. Buscar una persona desde un ID por argumento

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.

3. Buscar una pelicula desde un ID por argumento

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.

4. Mostrar estos tipos con un Show copado

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 = ...

5. Buscar películas

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]

Después del taller

Si te gustó y queres seguir aprendiendo, te dejamos unos links: