web-dev-qa-db-fra.com

Modèles de conception fonctionnels

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?

106

Ma suggestion est, si vous voulez apprendre la Scala, de lire le livre de Paul Chiusano et Runar Bjarnason:

http://manning.com/bjarnason/

Partie II: Conception fonctionnelle et bibliothèques combinatoires

  1. Faire de petites langues
  2. Sérialisation JSON
  3. Tests basés sur les spécifications
  4. Analyseurs
  5. Parallélisme purement fonctionnel
  6. État purement fonctionnel

Partie III: Modèles de conception fonctionnelle

  1. Le cas de l'abstraction
  2. Monoïdes
  3. Foncteurs
  4. Monades
  5. Foncteurs applicatifs
  6. Structures de données transversales et pliables
  7. Comonads

Partie IV: Briser les règles: effets et E/S

  1. Effets vs effets secondaires
  2. Traitement de flux et E/S incrémentielles
  3. Application de la portée des effets avec le système de types
35
Edmondo1984

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.

  1. Pensée fonctionnelle: modèles de conception fonctionnelle, partie 1 . Ici, ils couvrent les usines, les méthodes de modèle, la stratégie, la masselotte. L'essentiel est qu'en ayant des fonctions comme valeurs de première classe, tout est beaucoup plus simple.
  2. Pensée fonctionnelle: modèles de conception fonctionnelle, partie 2 . Il s'agit de Java et groovy . Il concerne le modèle d'adaptateur.
  3. Pensée fonctionnelle: modèles de conception fonctionnelle, partie . Ici, ils parlent du modèle d'interprète. Encore une fois, la langue cible est groovy.

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.

31
Riccardo T.

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.

18
pigworker

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/

9
Andriy Plokhotnyuk

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.

5
Chris Taylor