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.
- 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.
- Pensamiento funcional: patrones de diseño funcional, parte 2 . Se trata de Java y Groovy . Se dirige al patrón del adaptador.
- 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.