Il existe de nombreux idiomes fonctionnels: monades, applicatifs, flèches, etc. Ils sont documentés dans différents articles mais malheureusement je ne connais aucun livre ou article où ils sont résumés en un seul endroit (il y a Typeclassopedia mais il a beaucoup de domaines qui ne sont pas bien couverts). Quelqu'un peut-il recommander un article/livre qui les couvre bien en un seul endroit et qui peut être accessible à un programmeur ayant des compétences intermédiaires en PF?
Ma suggestion est, si vous voulez apprendre la Scala, de lire le livre de Paul Chiusano et Runar Bjarnason:
Partie II: Conception fonctionnelle et bibliothèques combinatoires
Partie III: Modèles de conception fonctionnelle
Partie IV: Briser les règles: effets et E/S
Je suis désolé, je ne connais pas d'articles ou de livres qui couvrent en détail les différents usages de toutes ces constructions, mais je peux vous donner quelques liens vers des ressources individuelles.
Un modèle assez courant consiste à construire transformateurs de monade au lieu de simples monades (voir aussi le lien dans le paragraphe suivant). Cela signifie essentiellement que vous construisez quelque chose qui doit être combiné avec d'autres monades, résultant en une plus complexe capable de gérer les fonctionnalités des deux.
Dans Haskell du monde réel il y a quelques chapitres sur les monades. Dans Chapitre 14. Monades les auteurs expliquent les bases et certains usages courants (peut-être, lister, état). Chapitre 15. Programmation avec des monades fournit plus d'explications sur la façon de les utiliser efficacement (il couvre également la monade du lecteur). Le chapitre suivant explique comment utiliser Parsec , mais il peut être plus intéressant de rechercher des articles couvrant son fonctionnement réel: il devrait être un très bon exemple d'une utilisation bien organisée des monades pour l'analyse. Fianlly, Chapitre 18. Transformateurs monades présente le fonctionnement des transformateurs monades, puis montre comment en construire un, étape par étape. Les considérations relatives aux dernières sections du chapitre sont également intéressantes.
J'ai lu une fois une question vraiment intéressante sur SO about tilisations créatives des monades . Les liens proposés étaient des lectures impressionnantes sur le sujet. Avec cet esprit, j'ai essayé de demander au idem pour flèches : J'ai certainement eu moins de réponses que celle sur les monades, mais néanmoins intéressantes.
En ce qui concerne OOP modèles par le gang de quatre, il y a un bel ensemble de 3 articles d'IBM sur le sujet dans leur série Pensée fonctionnelle . Le langage fonctionnel cible est Scala. Ils procèdent en expliquant les modèles de conception habituels dans OOP et en montrant comment ils sont mappés dans Scala.
L'article le plus pertinent w.r.t. votre question est certainement la première, mais les deux autres peuvent néanmoins être des lectures intéressantes.
Jeremy Gibbons a un Patterns in FP blog qui est destiné à devenir à peu près le livre que vous demandez. Bien sûr, ce n'est pas encore en état de soyez aussi utile que vous le souhaitez, mais il mérite des encouragements!
En attendant, je dirai +1 pour Typeclassopedia de Brent Yorgey. C'est vraiment utile, et s'il y a des parties ultérieures qui prêtent à confusion, ce site est un bon endroit pour aller au fond d'eux. Je sais que Brent le tient à jour. S'il n'atteint pas ses lecteurs, aidez-le.
Beaucoup de FP trucs sont publiés sur le site d'Oleg: http://okmij.org/ftp/
Présentation sur FP patterns de Josh Suereth: http://jsuereth.com/intro-to-fp/
Avez-vous lu les derniers chapitres de Learn You a Haskell for Great Good ?
Le chapitre 6 couvre les cartes et les plis, qui sont deux des "modèles de conception" les plus importants dans les langages fonctionnels.
Les chapitres 11 à 13 couvrent les foncteurs, les foncteurs applicatifs et les monades, dans cet ordre. Cela est utile - de nombreux didacticiels présentent les foncteurs puis les monades, puis clouent les foncteurs applicatifs à la fin (s'ils le couvrent du tout). L'ordre dans LYAH est meilleur, car passer de Functors => Applicative Functors => Monads vous fait monter progressivement l'échelle de généralité et de puissance.
Le chapitre 14 couvre les fermetures à glissière - vous pouvez effectivement les considérer comme des classes de conteneur avec un pointeur vers une donnée spécifique, ce qui signifie que vous obtenez O(1) accès et mise à jour à l'emplacement du pointeur).
Il ne couvre pas les flèches ou les comonades, qui sont un sujet plus avancé dans Haskell. Pour comprendre comment et pourquoi utiliser des flèches ou des comonades, vous devez certainement déjà avoir une bonne compréhension des monades, donc je ne pense pas que ce soit un problème - LYAH vise fermement la fin débutante du marché Haskell.