Patrones de diseño funcional [cerrado]


106

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?


No responde directamente a su pregunta, pero esta otra pregunta tiene información interesante (y al menos un enlace o dos): stackoverflow.com/questions/327955/…
reuben

15
¿Podría explicar qué áreas cree que Typeclassopedia no cubre bien?
dave4420

2
@ dave4420 Si leo typeclassopedia de principio a fin, cuanto más leo, menos entiendo. Las primeras secciones son realmente buenas, pero las últimas apenas me resultan legibles.
Konstantin Solomatov

3
@KonstantinSolomatov puede ser que necesites investigar las secciones que no entiendes, mirar las publicaciones del blog y mirar detenidamente el código. todos estos "patrones de diseño" en la typeclassopedia son en realidad abstracciones, y a menudo profundas, que a veces tardan en asimilarse.
jberryman

1
@DanBurton no estoy seguro si leíste mal mi comentario, pero categorizaría todas esas como abstracciones profundas, aunque es fácil olvidar eso cuando has tenido tu "¡Ah, ja!" momento.
jberryman

Respuestas:


35

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

  1. Haciendo pequeños lenguajes
  2. Serialización JSON
  3. Pruebas basadas en especificaciones
  4. Analizadores
  5. Paralelismo puramente funcional
  6. Estado puramente funcional

Parte III: Patrones de diseño funcional

  1. El caso de la abstracción
  2. Monoides
  3. Functores
  4. Mónadas
  5. Functores aplicativos
  6. Estructuras de datos transitables y plegables
  7. Comonads

Parte IV: Rompiendo las reglas: efectos y E / S

  1. Efectos frente a efectos secundarios
  2. Procesamiento de flujo y E / S incremental
  3. Aplicación del alcance de efectos con el sistema de tipos

31

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.

  1. Pensamiento funcional: patrones de diseño funcional, parte 1 . Aquí cubren fábricas, métodos de plantilla, estrategia, peso mosca. La conclusión es que al tener funciones como valores de primera clase, todo es mucho más simple.
  2. Pensamiento funcional: patrones de diseño funcional, parte 2 . Se trata de Java y Groovy . Se dirige al patrón del adaptador.
  3. Pensamiento funcional: patrones de diseño funcional, parte 3 . Aquí se habla del patrón de intérprete. Una vez más, el idioma de destino es maravilloso.

El artículo más relevante de su pregunta es sin duda el primero, pero los otros dos pueden ser lecturas relacionadas interesantes.


Gracias, pero me refiero a diferentes tipos de patrones, como Monad, Arrow, Applicative no GoF.
Konstantin Solomatov

@KonstantinSolomatov: No entendí tu pregunta, lo siento. Agregué algunas referencias para mónadas y flechas.
Riccardo T.

18

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.



5

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


1
Sí, leí el libro. Me gusto mucho. Desafortunadamente, no oculta flechas ni muchos otros patrones avanzados. También quiero leer más sobre Mónadas y Aplicativos (por ejemplo, LYHGG no cubre la mónada de continuación).
Konstantin Solomatov
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.