¿Cuál es el mejor libro para aprender programación funcional con Haskell?

He estado tratando de aprender Purescript, un tipo de dialecto para Haskell, y debido a la escasez de material de aprendizaje, me he visto obligado a aprender Haskell en el camino. Hasta ahora, he leído o estoy leyendo los siguientes libros:

  • Programación de Haskell desde los primeros principios por Chris Allen y Julie Moronuki
  • Learn You a Haskell por Miran Lipovaca
  • Patrones de diseño Haskell de Ryan Lemmer
  • Aprenda Haskell (MEAP) por Will Kurt

Solo he leído completamente Learn You a Haskell, aunque he leído una buena parte de Haskell de First Principles. Solo he leído sobre un tercio de los Principios de diseño de Haskell, aunque he leído la mayor parte, y solo 2 capítulos de Learn Haskell. Como tal, solo hablaré sobre los primeros tres libros.

Learn You a Haskell (LYAH) no es un libro malo, pero a menos que lo desee porque es gratis, no lo recomendaría para su primer libro (lo explicaré más adelante). Me gustó su advertencia de no aferrarse demasiado a la analogía de la “caja” para Functores, Solicitantes y Mónadas. El libro es un buen libro en general, aunque sea ligero en algunos temas. Desearía que cubrieran cosas como Combinators, Arrows o Monad Transformers. Por lo tanto, es bueno como comienzo, pero para la programación avanzada o incluso intermedia, falta. Tampoco le enseña nada sobre el ecosistema de Haskell, como el uso de la herramienta de construcción Stack (o incluso Cabal) o incluso una descripción general de los módulos del mundo real. Como estoy más interesado en purescript (que se evalúa con entusiasmo) que Haskell (que es perezoso), no me preocupaba demasiado la mención de las trampas de la pereza, pero ten cuidado si estás haciendo de Haskell.

El libro Haskell Programming from First Principles (HPFP) es más completo y supone que el lector no tiene experiencia en programación. Le resultaba una tarea ardua leer algunas secciones del libro, tal vez porque ya soy desarrollador, y en segundo lugar, porque mucho de esto no era nuevo para mí al leer LYAH. Pero, si había algo confuso para mí en LYAH, HPFP generalmente tenía una explicación más completa del concepto. Sin embargo, aún diría que, si bien este libro cubre algunos temas más intermedios como Combinadores, Transformadores de mónada o cómo usar el Apilamiento, todavía no entra realmente en Flechas o Lentes, y desearía que hubiera alguna mención de Mónadas libres o Comonads. Sin embargo, el libro cubre la falta de rigor mucho más que LYAH.

El último libro, Haskell Design Patterns es más del libro intermedio al avanzado. Se supone que tiene un conocimiento decente de Haskell y desea mejorar en algunos de los detalles más finos. Este libro cubre algunas de las trampas de la pereza, especialmente cuando se trata de IO. También cubre flechas y toques de lentes. Definitivamente no es un libro para aprender Haskell, sino un buen segundo o tercer libro.

Otros materiales y libros que he usado para aprender incluyen:

  • Todo sobre mónadas
  • Lo que desearía saber al aprender Haskell
  • Escríbele un Haskell (Stephen Diehl)
  • Escuela de Haskell
  • Teoría de la categoría para programadores: el prefacio

Solo por mi propia experiencia, las mónadas no son la parte difícil de Haskell, los tipos sí lo son. Solo estoy en el cuarto capítulo de la teoría de la categoría para programadores, pero me está ayudando a comprender realmente qué tipos son. Las mónadas, después de todo, son solo un concepto implementado como una clase de tipo. Haskell, como lenguaje FP puro, tiene que ver con funciones. Pero sin tipos, ¿cómo sabe si puede componer funciones de manera segura?

Creo que clavar tipos y clases de tipos es crucial para comprender Haskell. Entonces, desde ese punto de vista, probablemente recomendaría HPFP como su primera lectura. Si bien leer LYAH primero no hará daño, podría aburrirle leer HPFP en segundo lugar. Además, HPFP cubre todo lo que hace LYAH, pero lo contrario no es cierto. Además, no haga lo que hice y omita los ejercicios. Haz los ejercicios en el libro de HPFP. Recomiendo leer los patrones de diseño de Haskell una vez que comience a comprender los conceptos básicos.

  • La programación en Haskell por Graham es excelente, podría seguirla mientras aprendía Introducción a FP en edx, que es un curso en línea de Eric Meijer.
  • Patrones de diseño de Haskell por Ryan Lemmer: estoy leyendo esto ahora y es genial, sin embargo, actualmente estoy luchando con Iteratees I / O
  • Programación paralela y concurrente en Haskell por Simon Marlow – este es mi próximo en la lista, muy bueno por lo que escuché
  • hay más libros, cursos y videos de Haskell
  • por ejemplo, para comprender a los iterantes que provienen de un contexto imperativo como la mayoría de los mortales, puede encontrar presentaciones como James Roper: Iteratees in Play realmente intuitivas
  • Enfrentando al escuadrón incómodo (preocupaciones de programación de la vida real en Haskell): http://research.microsoft.com/en
  • así que hay muchos recursos, necesita practicar, codificar, abrir ghci y hacer que su código se ejecute, es decir, no copie el código de pegado, escriba el suyo hasta que funcione, solo así puede aprender
  • Comencé con Learn You a Haskell for Great Good , pero no estoy seguro de recomendarlo. Parece más una referencia que otra cosa; Está bien para aprender la sintaxis, pero no es genial para aprender a pensar en Haskell.

    Encontré que escribir un esquema en 48 horas me ayudó a superar el obstáculo. Es más un tutorial extendido que un libro per se , y probablemente mejor una vez que hayas descubierto los conceptos básicos del lenguaje, pero vale la pena leerlo.

    Real World Haskell es un buen libro intermedio y está disponible gratis en línea. Una vez que haya superado el punto de aprender el idioma y realmente hacer algo con él, RWH lo ayudará a resolver problemas específicos del mundo real. Al mismo tiempo, ha envejecido un poco y le faltan algunas bibliotecas nuevas más importantes, por lo que tendrá que complementarlo buscando en otro lugar en línea.

    Otro recurso intermedio maravilloso es la programación paralela y concurrente en Haskell, que es exactamente lo que dice en la lata, y cubre sus dos temas a la perfección. Una vez que llegue a escribir software paralelo o concurrente (es decir, un servidor web), aquí es donde debe comenzar.

    Hay un par de libros más que no he leído pero que parecen fuertes:

    О Haskell по-человечески es una introducción accesible al idioma si hablas ruso. He leído partes de él y parece sólido y prometedor. Hay una traducción al inglés de origen público, pero no sé qué tan buena es.

    La programación de Haskell a partir de First Principles todavía es un trabajo en progreso, pero es, a todas luces, convincente. De todos estos libros, probablemente presta más atención a la pedagogía y es la mejor opción si no tiene experiencia en programación. Todavía es genial incluso si lo haces, pero supone menos que la mayoría de los otros libros que he enumerado.

    Yo recomendaría “Programación en Haskell” por Graham Hutton .

    Desarrolla una forma funcional de pensar usando Haskell. Otro buen libro que introduce la programación funcional en Haskell a través de la lógica y las matemáticas es “El camino de Haskell a la lógica, las matemáticas y la programación” de Kees Doets y Jan van Eijck .

    Solo para complementar las otras buenas respuestas, ya que está solicitando aprender programación funcional con Haskell como lenguaje de codificación, hay dos libros escritos específicamente para este propósito, que no se han mencionado aquí:

    • Simon Thompson “El arte de la programación funcional” http://www.haskellcraft.com/
    • Richard Bird “Pensando funcionalmente con Haskell”. La página web Thinking Functionally with Haskell contiene material adicional, que incluye erratas y archivos fuente con los programas. Y aquí está la excelente revisión de Mark Harrsion. ¿Cuál es su revisión de Thinking Functionally with Haskell (2014 book)?

    Ambos están escritos para el programador con mentalidad matemática y claramente dirigidos a cursos académicos (por dos profesores destacados), pero supongo que esta inclinación podría ser una característica deseable para sus intereses. Sugeriría leer primero el libro de Thompson, ya que tiene explicaciones más elaboradas, mientras que Bird tiene excelentes ejemplos y trucos ingeniosos. En última instancia, si no tiene los antecedentes matemáticos necesarios, es posible que deba complementar estos libros con algún tutorial sobre lo que pueda estar faltando. Se necesita competencia en razonamiento equitativo y, en última instancia, Haskell se basa en el cálculo lambda y en algunos conceptos de la teoría de categorías (mónada, composición de Kleisli). Es difícil decir cuánto necesita aprender sobre esas materias para comprender cómodamente la PF, y me atrevo a decir que son un poco difíciles para la autoaprendizaje.

    Creo que califico para hablar, dado el hecho de que acabo de terminar (léase: listo para comenzar con la realidad) con Haskell.
    Debo decir que nunca he visto algo tan bueno como:

    learnyouahaskell.com

    Había programado en Scala antes de esto, comencé con un libro realmente bonito llamado:

    Programación funcional en Scala

    https://www.manning.com/books/fu

    Pero lo dejó en el medio. Se volvió aburrido después de un tiempo. Además, no es Haskell 🙂

    De todos modos, Learnyouahaskell es sin duda el camino a seguir si eres nuevo en FP. Realmente disfruté cada página!

    Aunque recomiendo Real World Haskell después de eso. Además, si le interesa Scala, lea el libro anterior también. Ciertamente vale la pena.

    FP para la victoria 🙂
    Feliz FPing!

    Además de los excelentes libros que otros han sugerido, recomiendo:

    Beginning Haskell de Alejandro Serrano Mena es un gran libro actualizado sobre Haskell moderno, que incluye herramientas, desarrollo web, etc.

    Haskell Data Analysis Cookbook de Nishant Shukla proporciona muchas recetas al estilo de libros de cocina para hacer cosas prácticas en Haskell

    Buenas respuestas aquí. Pensé que agregaría Haskell – Wikibook. Wikilibros, libros abiertos para un mundo abierto

    ¡Es realmente genial para conceptos avanzados de FP!

    Hay algunos buenos libros, pero si tuviera que elegir uno para comprender los conceptos básicos de la teoría de categorías, sería “¡Aprende Haskell por un gran bien!”. Incluso si nunca escribe una línea de Haskell, aplicará estos conceptos al programar en el lenguaje de su elección y pasará un buen rato solo leyéndolo.

    Estoy disfrutando de la programación Haskell desde los primeros principios. Hay un hilo en Quora al respecto.

    Por lo que puedo decir, Haskell es el Slackware de FP: si conoces a Haskell, conoces a FP. Dicho esto, el mejor recurso que he encontrado hasta ahora es Real World Haskell.

    ATA te sugiero por lo menos un Haskell para un gran bien.