typestar

Fundamentos del lenguaje

27 pasos en 9 series de Haskell.

Haskell es el lenguaje donde el sistema de tipos hace el trabajo pesado: funciones puras por defecto, efectos marcados en los tipos y un compilador que atrapa categorías enteras de errores antes de que algo corra. Se lee menos como instrucciones y más como definiciones — un programa es un conjunto de ecuaciones, y GHC descubre cómo correrlas de forma perezosa, solo a medida que se piden los resultados.

Este tour cubre el núcleo de trabajo en GHC2021 pelado — sin extensiones: vinculaciones con firmas, currificación y composición, coincidencia de patrones con guardas, listas y comprensiones, el trío map/filter/fold, tipos de datos algebraicos y registros, clases de tipos con deriving e instancias escritas a mano, y apenas la notación do necesaria para imprimir resultados. El bis entrega programas completos. Cada fragmento pasa el chequeo de tipos bajo ghc -Wall con las advertencias como errores, y el bis corre de principio a fin.

Empieza este tour

Valores y tipos

  • Vinculaciones y firmasEl perfil de un sendero escrito como vinculaciones de nivel superior, cada una con su firma de tipo.
  • Aritmética entera y fraccionariaPrepara tazas con una bolsa de granos y mantiene separadas la aritmética entera y la fraccionaria.
  • Cadenas y caracteresRearma el anuncio de una puerta de embarque, porque un String no es más que una lista de caracteres.

Funciones

Coincidencia de patrones

  • case y formas de listaLee un corredor de semáforos con expresiones case sobre un tipo suma.
  • Guardas y whereConvierte un semestre de puntajes de examen en una nota con letra y un comentario adjunto.
  • Tuplas y paresEmpareja filas de asientos con conteos de boletos y después saca la fila más ocupada.

Listas

  • Construir listas(:) agrega un elemento al frente, (++) une dos listas enteras y un patrón cubre el caso vacío.
  • Rangos[6 .. 10] cuenta de uno en uno; nombrar los dos primeros elementos elige cualquier otro paso.
  • Comprensiones de listasLos generadores a la derecha de la barra alimentan la expresión de la izquierda; las guardas descartan lo que falla.

Orden superior

  • map y filtermap reescribe cada elemento, filter conserva los que pasan y (.) encadena los dos en un pipeline.
  • Foldsfoldr y foldl' colapsan una lista en un solo valor; difieren en la dirección y en cuándo ocurre el trabajo.
  • Lambdas y seccionesUna lambda es una función sin nombre; una sección es un operador con un operando ya puesto.

Tipos y registros

  • Tipos sumaUn tipo suma enumera todos los valores que el tipo admite, y deriving escribe el código de impresión y comparación.
  • RegistrosLa sintaxis de registros nombra cada campo, define un accesor por campo y copia un valor con cambios.
  • Maybe y EitherMaybe reporta un valor ausente como Nothing; Either lleva un motivo en el Left.

Clases de tipos

  • Derivar instanciasUna cláusula deriving en un tipo suma aporta gratis Show, Eq, Ord, Enum y Bounded.
  • Instancias propiasInstancias Show y Eq escritas a mano deciden cómo se imprime un valor y qué cuenta como igual.
  • Ord y ordenamientoTres ordenamientos de una lista: sortBy con comparador, sortOn con clave y Down para invertir.

Fundamentos de IO

  • Secuenciar IO con doUn bloque do corre acciones de IO de arriba abajo y llama a una función pura a mitad de camino.
  • let frente a bind en IODentro de do, let nombra un valor puro mientras <- ejecuta una acción y vincula su resultado.
  • Imprimir con mapM_mapM_ corre una acción por elemento y descarta los resultados; forM_ es igual con los argumentos al revés.

Bis

  • word_freq.hsCuenta frecuencias de palabras en un pasaje incrustado e imprime las ocho primeras con totales.
  • grade_report.hsPromedia los puntajes de cada estudiante, asigna nota con letra e imprime una tabla ordenada con resumen del curso.
  • temp_stats.hsReporta una semana de máximas diarias con el mínimo, el máximo, la media y una barra al lado de cada día.

Los otros tours de Haskell