¿Cuáles son los mejores recursos para aprender Haskell?

EDIT: bitemyapp / learnhaskell es una gran colección de recursos adecuados para el aprendizaje de Haskell. Mucho más completo y actual que esta respuesta de 2013.

Los tres libros que he encontrado más útiles son: ¡Aprende Haskell para un Gran Bien !, Real World Haskell, y la más reciente Programación Paralela y Concurrente en Haskell (PCPH). Los tres de estos libros están disponibles gratuitamente en línea, ¡pero sugeriría al menos comprar los formularios de libros electrónicos para incentivar a los autores a escribir más! 🙂

Recomiendo encarecidamente leer al menos las primeras secciones de PCPH lo antes posible. Comprender la evaluación no estricta de Haskell es importante y este libro tiene la mejor cobertura del tema que he visto hasta ahora. El libro no supone demasiado conocimiento de Haskell, y el material es importante incluso para la programación en serie, ¡así que no lo guardes para el final!

Otros recursos que me parecieron útiles fueron buscar diapositivas y notas de las clases universitarias y revisar ese material, como CS240h: Sistemas funcionales en Haskell y el CIS 194 más reciente. Enumeré algunos recursos más en mi Introducción al Haskell enviar.

Una vez que haya completado algunos capítulos, puede que le resulte útil comenzar a resolver los ejercicios de Haskell en exercism.io. La diferencia entre el ejercicio y la resolución de problemas de un libro es la colaboración. Otros que hayan resuelto el ejercicio revisarán su presentación, lo que lo ayudará a adquirir buenos hábitos de Haskell mucho más rápidamente de aquellos con más experiencia. Un poco más de información sobre esto está aquí: Aprenda Haskell con exercism.io.

Por muy cursi que parezca, diría que el mejor recurso gratuito es la comunidad. Casi todos los que conozco en la comunidad de Haskell son amigables y serviciales de manera uniforme. También hay una increíble relación señal-ruido (¡siempre que considere la señal de informática avanzada en lugar del ruido!).

Así que pase un rato en #haskell, pregunte en StackOverflow y Reddit, únase a @ haskell-cafe o, mejor aún, vaya a una reunión física. Acabo de regresar de BayHac, un evento gratuito en Mountain View CA, y fue increíble: más de 100 Haskellers, habla de todo, desde la teoría hasta el desarrollo web y la conversión de LaTeX en Word, y, sobre todo, un montón de grandes personas. Conversaciones interesantes.

Siempre me sorprende la variedad de intereses que tiene Haskellers: en BayHac, vi a gente trabajando en todo, desde el desarrollo web hasta el diseño de hardware, la teoría de categorías, la robótica y la verificación hasta … Es probable que haya alguien trabajando en lo que sea que te guste.

Pero probablemente quieras algunas cosas concretas para leer. Hay algunos libros bastante buenos que puedes leer gratis: ¡Real World Haskell y Learn You a Haskell for Great Good! son buenos lugares para empezar; La programación paralela y concurrente en Haskell es una gran toma de este tema y también hay libros gratuitos para dos de los marcos web populares (Snap y Yesod).

Aparte de los libros, hay un montón de blogs que puedes leer. Para mí, estos blogs son significativamente más útiles que la mayoría de los libros. Hay demasiados en la lista, así que eche un vistazo a las tendencias en / r / haskell y siga las que tienen buenos artículos allí.

Estas son las principales cosas que vienen a la mente, de todos modos. Lo último que vale la pena leer, una vez que te sientas cómodo con Haskell, son los muchos artículos al respecto. ¡Muchos de estos son mucho más accesibles de lo que cabría esperar! (Y algunos … realmente no lo son). Para empezar, mira algunas de las perlas funcionales; después de eso, lea en profundidad sobre cualquier tema que le interese en ese momento.

De todos modos, espero que esta sea una buena fuente de cosas gratis para hacer y leer en el universo de Haskell. Aquí hay cosas para cada nivel de habilidad, lo suficiente para ocuparte básicamente para siempre … Después de todo, siempre hay más que aprender.

Voy a ordenar esta guía por el nivel de habilidad que tiene en haskell, yendo desde un principiante absoluto hasta un experto. Tenga en cuenta que este proceso llevará muchos meses (¿años?), Por lo que es bastante largo.

Aprenda sobre Haskell aquí: https://hackr.io/tutorials/learn

Principiante absoluto

En primer lugar, haskell es capaz de cualquier cosa, con suficiente habilidad. Es muy rápido (detrás de c y c ++, según mi experiencia), y se puede usar para cualquier cosa, desde simulaciones hasta servidores, guis y aplicaciones web.

Sin embargo, hay algunos problemas que son más fáciles de escribir para un principiante en haskell que otros. Los problemas matemáticos y los programas de proceso de listas son buenos candidatos para esto, ya que solo requieren el conocimiento más básico de haskell para poder escribir.

En primer lugar, algunas buenas guías para aprender los conceptos básicos de haskell son el tutorial de aprender feliz de haskell y los primeros 6 capítulos de aprender un haskell. Mientras lees esto, es una muy buena idea también resolver problemas simples con lo que sabes.

Una buena lista de problemas para probar es la página de problemas de haskell 99. Estos comienzan muy básicos y se vuelven más difíciles a medida que avanzas. Es una muy buena práctica hacer muchas de ellas, ya que te permiten practicar tus habilidades en recursión y funciones de orden superior. Recomendaría omitir cualquier problema que requiera aleatoriedad ya que es un poco más difícil en haskell. Marque esta pregunta SO en caso de que quiera probar sus soluciones con QuickCheck (consulte Intermedio a continuación).

Una vez que haya hecho algunos de esos, podría pasar a hacer algunos de los problemas del Proyecto Euler. Estos están ordenados por la cantidad de personas que los han completado, lo que es una buena indicación de dificultad. Estos ponen a prueba tu lógica y haskell más que los problemas anteriores, pero aún así deberías poder hacer los primeros. Una gran ventaja de haskell con estos problemas es que los enteros no están limitados en tamaño. Para completar algunos de estos problemas, será útil haber leído los capítulos 7 y 8 para aprender también un haskell.

Principiante

Después de eso, deberías tener un buen manejo de la recursión y las funciones de orden superior, por lo que sería un buen momento para comenzar a hacer más problemas del mundo real. Un muy buen lugar para comenzar es Real World Haskell (libro en línea, también puede comprar una copia impresa). Encontré que los primeros capítulos se introdujeron demasiado rápido para alguien que nunca antes había hecho la programación funcional / uso recursivo. Sin embargo, con la práctica que habría tenido de hacer los problemas anteriores, debería encontrarlo perfectamente comprensible.

Resolver los problemas del libro es una excelente manera de aprender a administrar abstracciones y construir componentes reutilizables en haskell. Esto es vital para las personas acostumbradas a la programación orientada a objetos (oo), ya que los métodos normales de abstracción oo (clases oo) no aparecen en haskell (haskell tiene clases de tipos, pero son muy diferentes de las clases oo, más bien son interfaces oo ). No creo que sea una buena idea saltear capítulos, ya que cada uno presenta muchas ideas nuevas que se usan en capítulos posteriores.

Después de un tiempo, llegará al capítulo 14, el temido capítulo de las mónadas (dum dum dummmm). Casi todos los que aprenden haskell tienen problemas para entender las mónadas, debido a lo abstracto que es el concepto. No puedo pensar en ningún concepto en otro lenguaje que sea tan abstracto como lo son las mónadas en la programación funcional. Las mónadas permiten que muchas ideas (como operaciones de E / S, cálculos que pueden fallar, análisis, …) se unifiquen bajo una sola idea. Así que no te desanimes si después de leer el capítulo de las mónadas realmente no las entiendes. Me pareció útil leer muchas explicaciones diferentes de las mónadas; Cada uno da una nueva perspectiva sobre el problema. Aquí hay una muy buena lista de tutoriales de mónada. Recomiendo encarecidamente el All About Monads, pero los demás también son buenos.

Además, toma un tiempo para que los conceptos realmente se hundan. Esto viene a través del uso, pero también a través del tiempo. ¡Encuentro que a veces dormir sobre un problema ayuda más que cualquier otra cosa! Eventualmente, la idea hará clic y te preguntarás por qué luchaste por entender un concepto que en realidad es increíblemente simple. Es asombroso cuando esto sucede, y cuando sucede, puede que encuentre que haskell sea su lenguaje de programación imperativo favorito

Para asegurarse de que comprende perfectamente el sistema de tipos Haskell, debe intentar resolver 20 ejercicios de haskell intermedios. Esos ejercicios utilizan nombres divertidos de funciones como “furry” y “banana” y te ayudan a comprender mejor algunos conceptos básicos de programación funcional si aún no los tienes. Una buena forma de pasar la noche con una lista de papeles cubiertos con flechas, unicornios, salchichas y plátanos peludos.

Intermedio

Una vez que entiendas a Monads, creo que has hecho la transición de un programador de haskell principiante a un haskeller intermedio. Entonces, ¿a dónde ir desde aquí? Lo primero que recomendaría (si aún no los ha aprendido de las mónadas de aprendizaje) son los distintos tipos de mónadas, como Reader, Writer y State. De nuevo, Real world haskell y All about monads ofrecen una gran cobertura de esto. Para completar tu entrenamiento de mónadas, aprender sobre los transformadores de mónadas es imprescindible. Éstos le permiten combinar diferentes tipos de mónadas (como un lector y una mónada estatal) en uno. Esto puede parecer inútil para empezar, pero después de usarlos por un tiempo, se preguntará cómo vivió sin ellos.

Ahora puedes terminar el libro de haskell del mundo real si quieres. Sin embargo, omitir capítulos ahora realmente no importa, siempre y cuando tengas mónadas. Simplemente elige lo que te interesa.

Con el conocimiento que tendría ahora, debería poder utilizar la mayoría de los paquetes en cabal (al menos los documentados …), así como la mayoría de las bibliotecas que vienen con haskell. Una lista de bibliotecas interesantes para probar sería:

  • Parsec: para analizar programas y texto. Mucho mejor que usar expresiones regulares. Excelente documentación, también tiene un capítulo real de haskell.
  • Quickcheck: Un programa de prueba muy bueno. Lo que hace es escribir un predicado que siempre debe ser verdadero (por ejemplo, length (reverse lst) == length lst ). Luego pasa el predicado quickCheck, y generará muchos valores aleatorios (en este caso, listas) y comprobará que el predicado sea verdadero para todos los resultados. Véase también el manual en línea.
  • HUnit: Pruebas unitarias en haskell.
  • gtk2hs: el marco gui más popular para haskell, te permite escribir aplicaciones gtk en haskell.
  • happstack: Un framework de desarrollo web para haskell. No utiliza bases de datos, en lugar de un almacén de tipos de datos. Documentos bastante buenos (otro marco popular sería snap y yesod).

Además, hay muchos conceptos (como el concepto de la mónada) que eventualmente deberías aprender. Esto será más fácil que aprender Mónadas la primera vez, ya que su cerebro estará acostumbrado a tratar con el nivel de abstracción involucrado. Una descripción muy buena para aprender sobre estos conceptos de alto nivel y cómo encajan entre ellos es la Typeclassopedia.

  • Aplicativo: Una interfaz como las mónadas, pero menos potente. Cada mónada es aplicativa, pero no viceversa. Esto es útil ya que hay algunos tipos que son Aplicativos pero no son Mónadas. Además, el código escrito con las funciones de aplicación es a menudo más composible que escribir el código equivalente con las funciones de la mónada. Ver Functors, Applicative Functors y Monoids en la guía de haskell de Learn You.
  • Foldable, Traversable: Clases de tipos que abstraen muchas de las operaciones de las listas, de modo que las mismas funciones se pueden aplicar a otros tipos de contenedores. Véase también la explicación de haskell wiki.
  • Monoide: un Monoide es un tipo que tiene un valor de cero (o mempty), y una operación anotada <> que une dos Monoides juntos, de manera que x <> mempty = mempty <> x = x y x <> (y <> z) = (x <> y) <> z . Estas se llaman leyes de identidad y asociatividad. Muchos tipos son monoides, como los números, con mempty = 0 y <> = + . Esto es útil en muchas situaciones.
  • Flechas: Las flechas son una forma de representar cálculos que toman una entrada y devuelven una salida. Una función es el tipo más básico de flecha, pero hay muchos otros tipos. La biblioteca también tiene muchas funciones muy útiles para manipular flechas, son muy útiles incluso si solo se usan con funciones haskell antiguas.
  • Arreglos: los varios arreglos mutables / inmutables en haskell.
  • ST Monad: le permite escribir código con un estado mutable que se ejecuta muy rápidamente, mientras permanece puro fuera de la mónada. Vea el vínculo para mas detalles.
  • FRP: Functional Reative Programming, una nueva forma experimental de escribir código que maneja eventos, activadores, entradas y salidas (como una interfaz gráfica de usuario). Aunque no sé mucho sobre esto. La charla de Paul Hudak sobre la yampa es un buen comienzo.

Hay un montón de nuevas características de lenguaje que deberías echar un vistazo. Solo los enumeraré, puede encontrar mucha información sobre ellos en google, el haskell wikibook, el sitio http://haskellwiki.org y la documentación de ghc.

  • Clases de tipo multiparamétrico / dependencias funcionales.
  • Tipo familias
  • Tipos cuantificados existencialmente
  • Tipos fantasma
  • GADTS
  • otros…

Una gran cantidad de haskell se basa en la teoría de categorías, por lo que es posible que desee analizarla. Un buen punto de partida es la teoría de categorías para informáticos. Si no quiere comprar el libro, el artículo relacionado con el autor también es excelente.

Finalmente, querrá aprender más sobre las diversas herramientas de haskell. Éstos incluyen:

  • ghc (y todas sus características)
  • cabal: el sistema de paquetes haskell
  • darcs: un sistema de control de versiones distribuido escrito en haskell, muy popular para los programas de haskell.
  • eglefino: un generador automático de documentación de haskell

Mientras aprende todas estas nuevas bibliotecas y conceptos, es muy útil escribir un proyecto de tamaño moderado en haskell. Puede ser cualquier cosa (por ejemplo, un juego pequeño, un analizador de datos, un sitio web, un compilador). Trabajar en esto le permitirá aplicar muchas de las cosas que ahora está aprendiendo. Te quedas en este nivel por edades (aquí es donde estoy).

Experto

Te llevará años llegar a esta etapa (¡hola desde 2009!), Pero a partir de aquí supongo que empiezas a escribir documentos de doctorado, nuevas extensiones de ghc y nuevas abstracciones.

Obteniendo ayuda

Finalmente, mientras se encuentra en cualquier etapa de aprendizaje, existen múltiples lugares para obtener información. Estos son:

  • el canal # haskell irc
  • Las listas de correo. Vale la pena registrarse solo para leer las discusiones que tienen lugar, algunas son muy interesantes.
  • otros lugares que figuran en la página de inicio de Haskell Language

Conclusión

Bueno, esto resultó más largo de lo que esperaba … De todos modos, creo que es una muy buena idea dominar el haskell. Lleva mucho tiempo, pero eso se debe principalmente a que, al hacerlo, está aprendiendo una forma de pensar completamente nueva. No es como aprender ruby ​​después de aprender java, sino como aprender java después de aprender c. Además, estoy descubriendo que mis habilidades de programación orientada a objetos han mejorado como resultado del aprendizaje de haskell, ya que estoy viendo muchas formas nuevas de abstraer ideas.

Fuente- Comenzando con Haskell

Sugiero un libro ; específicamente, este libro: Haskell: el oficio de la programación funcional y, cuando se publique, es posible que prefieras el libro de Julie Moronuki y Chris Allen: la programación de Haskell.

He escuchado a mucha gente decir que LYAH no les funcionó. Con el libro anterior, cualquiera puede aprender Haskell y la Programación Funcional desde lo básico.

Los recursos web incluyen:

  • bitemyapp / learnhaskell
  • Como empiezo
  • Introducción a Haskell
  • Lo que desearía saber al aprender Haskell 2.2 (Stephen Diehl)

Para agregar a las otras excelentes respuestas, estoy aprendiendo Haskell en este momento. Comencé por leer Learn You a Haskell (LYAH). Al principio, solo estaba leyendo los capítulos, pero nada parecía pegarse (aunque me estaba familiarizando más con la estructura de Haskell).

Comencé a resolver problemas en H-99: Ninety-Nine Haskell Problems, junto con la lectura de LYAH. ¡Te sorprenderían los pequeños detalles que creías saber que no sabías! Se me queda mucho más en la mente si utilizo el material que leí para resolver problemas reales.

Programador novato / Haskeller aquí.

Comience con esto:

Apuntes de clase y tareas

Entonces haz esto:

CS240h: Sistemas funcionales en Haskell

En algún momento probablemente deberías hacer esto:

Escríbase un esquema en 48 horas

Y lee esto:

Bienvenido al sitio web de SICP

Y también hacer lo que Tijón dijo. Necesitamos un espacio más grande para BayHac el próximo año, así que si tiene espacios libres gigantescos, ¡puede conectarnos con lmk!

Si deseas aprender Haskell, deberías visitar este curso de Udemy: Programación de Haskell de aprendizaje .

Esto es lo que aprenderás en este curso:

  • Fundamentos de los tipos de datos y funciones de Haskell
  • Uso de funciones de orden superior para la manipulación poderosa de datos y la reutilización de código
  • Desarrollar y construir una aplicación Haskell utilizando una cadena de herramientas moderna
  • Escritura y realización de pruebas.
  • Escribir y desplegar una aplicación web simple.
  • Guardar y recuperar datos de una base de datos

¡Buena suerte con sus estudios!

———

Al hacer clic en los enlaces de esta respuesta y si compra algo a través de mi publicación, es posible que obtenga una pequeña parte de la venta.

¡Aprende un Haskell para un gran bien! ¡Aprende un Haskell para un gran bien! Es un buen libro para comenzar a aprender Haskell.

Para la práctica, HackerRank es un buen lugar. Tienen una sección completa dedicada a la programación funcional con muchos problemas de práctica. También tienen concursos de Programación Funcional donde puedes ganar fantásticos premios.

También Tutoriales – HaskellWiki ha compilado una lista de todos los buenos lugares donde puedes aprender Haskell. ¡¡¡Echale un vistazo!!!

¡¡¡Aclamaciones!!!

Descubrí que la Introducción a la Programación Funcional usando Haskell (2ª Edición) es muy buena y sólida para los principiantes (probablemente incluso aquellos sin un buen fondo funcional). Cubre solo lo básico, pero después de eso puede continuar con libros o documentos más avanzados.

Obtenga una cuenta gratuita en http://fpcomplete.com e inmediatamente comience a escribir y ejecutar los programas de Haskell en su navegador. También encontrarás tutoriales interactivos y artículos allí.

No he oído hablar de un tutorial “oficial” para Haskell. Este está en la lista que publicaste, pero vale la pena mencionarlo: ¡Aprende un Haskell para un gran bien!

Es una introducción divertida y bien articulada a Haskell. Definitivamente recomendado.

Ok, hay un curso introductorio en línea de Haskell FP en edx, por Erik Meijer, lo hice y es genial. Póngase en la lista de espera e intente acceder a materiales y trabajos para el hogar. Puedes encontrar las conferencias aquí en todo momento, ¡así que feliz aprendizaje!

También hay algunos libros: el libro de Haskell de Graham y “aprende a ti mismo un haskell para el bien mayor” son 2 libros que usé y son buenos. La programación paralela y concurrente en Haskell es un buen seguimiento de uno de los puntos fuertes de Haskell.

Usa tu computadora y practica mientras lees o haces MOOC. Encontrará todo esto en los primeros resultados de Google de esta búsqueda de Google, lea detenidamente.

Nuevamente, edx FP MOOC, (el libro de Haskell por Graham) y “aprende a ti mismo un haskell para el bien mayor” son los primeros 2 recursos, y tienes más opciones.

Realmente disfruté Real World Haskell (Real World Haskell), puedes leerlo gratis en línea, pero lo disfruté tanto que compré una copia. Se equilibra perfectamente la enseñanza de la lengua con interesantes proyectos de ejemplo. Además de eso, fue el primer recurso que realmente me hizo entender las mónadas.

No sé si cubre temas avanzados o temas más recientes, tiene algunos años en este momento.

Recomendaría comenzar a aprender Haskell del curso en línea de Erik Meijer. Este curso está disponible en las conferencias C9: Dr. Erik Meijer – Fundamental Programming Functionals, Capítulo 1 de 13 (Canal 9).

1. Aprende que haskell para grandes bienes
2. Haskell del mundo real

Ambos tienen versión en línea gratuita.

Haskell wiki también es un buen lugar para aprender. Contiene una gran cantidad de tutoriales y materiales relacionados con la teoría de categorías, mónadas, etc.

¡El sitio web Learn You a Haskell for Great Good! es un buen recurso si desea comenzar con la programación de Haskell. Hay este libro con el mismo nombre.

Otro buen libro podría ser Real World Haskell.

Para el recurso en línea refiera a HaskellWiki.

Solo puedo recomendar los libros listados en las respuestas anteriores. Existe un consenso definitivo sobre los tres libros enumerados en la respuesta de Bob Ippolito.
También sugeriría School of Haskell, los tutoriales son buenos y puedes experimentar con el código (el IDE está en línea con los tutoriales).

Mi recomendación para ir estos días es: bitemyapp / learnhaskell. A partir de ahí, encontrará enlaces a muchas de las cosas que se mencionan aquí, pero con recomendaciones sobre qué leer y cuándo para qué, y muchos trucos muy prácticos que, de lo contrario, podrían tardar mucho tiempo en encontrar.

El sitio web de Haskell solo es suficiente para aprenderlo.
Llegar a Haskell Wiki: Tutoriales – HaskellWiki.
Tiene gran cantidad de tutoriales para principiantes y avanzados.

¡Prueba Haskell! Un tutorial interactivo en tu navegador.