Hay muchos modismos funcionales: mónadas, aplicativos, flechas, etc. Están documentados en diferentes artículos pero desafortunadamente no conozco ningún libro o artículo donde estén resumidos en un solo lugar (hay Typeclassopedia pero tiene mucho de áreas que no están bien cubiertas). ¿Alguien puede recomendar un artículo / libro que los cubra bien en un solo lugar y que pueda ser accesible para un programador con habilidades intermedias en FP?
scala
haskell
functional-programming
monads
Konstantin Solomatov
fuente
fuente
Respuestas:
Mi sugerencia es, si quieres aprender Scala, leer el libro de Paul Chiusano y Runar Bjarnason:
http://manning.com/bjarnason/
Parte II: Diseño funcional y bibliotecas combinatorias
Parte III: Patrones de diseño funcional
Parte IV: Rompiendo las reglas: efectos y E / S
fuente
Lo siento, no conozco artículos o libros que cubran en detalle los diferentes usos de todas esas construcciones, pero puedo darle algunos enlaces a recursos individuales.
Un patrón bastante común es construir transformadores de mónadas en lugar de mónadas simples (vea también el enlace en el siguiente párrafo). Básicamente significa que construyes algo que debe combinarse con otras mónadas, lo que da como resultado una más compleja capaz de manejar las características de ambas.
En Real World Haskell hay algunos capítulos sobre mónadas. En el Capítulo 14. Mónadas, los autores explican los conceptos básicos y algunos usos comunes (tal vez, lista, estado). El capítulo 15. Programación con mónadas proporciona más explicaciones sobre cómo utilizarlas de forma eficaz (también cubre la mónada del lector). El siguiente capítulo explica cómo usar Parsec , pero puede ser más interesante buscar artículos que cubran cómo funciona realmente: debería ser un muy buen ejemplo de un uso bien organizado de mónadas para analizar. Fianlly, Capítulo 18. Transformadores de mónadapresenta cómo funcionan los transformadores de mónada y luego muestra cómo construir uno, paso a paso. Las consideraciones hacia las secciones finales del capítulo también son interesantes.
Una vez leí una pregunta realmente interesante sobre SO sobre los usos creativos de las mónadas . Los enlaces propuestos fueron lecturas increíbles sobre el tema. Con ese espíritu, traté de preguntar lo mismo por las flechas : definitivamente obtuve menos respuestas que la de las mónadas, pero interesantes de todos modos.
Con respecto a los patrones de programación orientada a objetos del grupo de cuatro, hay un buen conjunto de 3 artículos de IBM sobre el tema en su serie Pensamiento funcional . El lenguaje funcional de destino es Scala. Proceden explicando los patrones de diseño habituales en OOP y mostrando cómo se asignan a Scala.
El artículo más relevante de su pregunta es sin duda el primero, pero los otros dos pueden ser lecturas relacionadas interesantes.
fuente
Jeremy Gibbons tiene un blog Patterns in FP que está destinado a convertirse en el libro que estás pidiendo. Por supuesto, eso aún no está en condiciones de ser tan útil como quisieras en este momento, ¡pero se merece un poco de aliento!
Mientras tanto, diré +1 para la Typeclassopedia de Brent Yorgey. Es realmente útil, y si hay partes posteriores que confunden, este sitio es un buen lugar para llegar al fondo de ellas. Sé que Brent lo mantiene bajo revisión. Si no llega a sus lectores, bríndele ayuda.
fuente
Muchas cosas de FP se publican en el sitio de Oleg: http://okmij.org/ftp/
Presentación sobre patrones de FP de Josh Suereth: http://jsuereth.com/intro-to-fp/
fuente
¿Ha leído los últimos capítulos de Learn You a Haskell for Great Good ?
El capítulo 6 cubre mapas y pliegues, que son dos de los "patrones de diseño" más importantes en los lenguajes funcionales.
Los capítulos 11-13 cubren los Functores, los Functores Aplicativos y las Mónadas, en ese orden. Esto es útil: muchos tutoriales introducen Functors y luego Monads, y luego agregan Functors Aplicativos al final (si es que lo cubren). El orden en LYAH es mejor, porque pasar de Functores => Functores aplicativos => Mónadas te lleva gradualmente hacia arriba en la escalera de la generalidad y el poder.
El Capítulo 14 cubre las Cremalleras; puede pensar en ellas de manera efectiva como clases de contenedor con un puntero a un dato específico, lo que significa que obtiene acceso O (1) y actualiza en la ubicación del puntero.
No cubre Arrows o Comonads, que son un tema más avanzado en Haskell. Para comprender cómo y por qué usar Arrows o Comonads, definitivamente ya debe tener un conocimiento firme de Monads, por lo que no creo que esto sea un problema: LYAH está firmemente dirigido al extremo principiante del mercado Haskell.
fuente