Modèles de conception fonctionnelle [fermé]

106

Il y a beaucoup d'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 en a beaucoup des zones qui ne sont pas bien couvertes). 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?

Konstantin Solomatov
la source
Cela ne répond pas directement à votre question mais cette autre question contient des informations intéressantes (et au moins un lien ou deux): stackoverflow.com/questions/327955/…
reuben
15
Pourriez-vous développer les domaines que vous pensez que Typeclassopedia ne couvre pas bien?
dave4420
2
@ dave4420 Si je lis typeclassopedia du début à la fin, plus je lis, moins je comprends. Les premières sections sont vraiment bonnes mais les dernières sections sont à peine lisibles pour moi.
Konstantin Solomatov
3
@KonstantinSolomatov, il se peut que vous deviez rechercher les sections que vous ne comprenez pas, consulter les articles de blog et regarder attentivement le code. tous ces "modèles de conception" dans la typeclassopedia sont en réalité des abstractions, et souvent des abstractions profondes, qui prennent parfois un certain temps à s'imposer.
jberryman
1
@DanBurton ne sais pas si vous avez mal lu mon commentaire, mais je classerais toutes ces abstractions comme des abstractions profondes, même s'il est facile d'oublier cela lorsque vous avez eu votre "Ah ha!" moment.
jberryman

Réponses:

35

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 de combinateurs

  1. Faire des 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. Les foncteurs
  4. Monades
  5. Fonctions applicatives
  6. Structures de données traversables 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
Edmondo1984
la source
31

Je suis désolé de ne pas connaître 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 des transformateurs monades 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, ce qui en fait une plus complexe capable de gérer les fonctionnalités des deux.

Dans Real World Haskell, il y a quelques chapitres sur les monades. Dans le chapitre 14. Monades, les auteurs expliquent les bases et certains usages courants (peut-être, liste, état). Le chapitre 15. La 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 expliquant son fonctionnement réel: cela devrait être un très bon exemple d'utilisation bien organisée des monades pour l'analyse. Fianlly, Chapitre 18. Transformateurs Monadprésente le fonctionnement des transformateurs monades, puis montre comment en créer 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 très intéressante sur SO sur les utilisations créatives des monades . Les liens proposés étaient des lectures géniales sur le sujet. Avec cet esprit, j'ai essayé de demander la même chose pour les flèches : j'ai certainement moins de réponses que celle sur les monades, mais intéressantes quand même.


En ce qui concerne les modèles de POO du groupe de quatre, il y a un bel ensemble de 3 articles par IBM sur le sujet dans leur série Pensée fonctionnelle . Le langage fonctionnel cible est Scala. Ils poursuivent en expliquant les modèles de conception habituels dans la POO et en montrant comment ils se mappent 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, le poids mouche. 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 de groovy . Il s'adresse au modèle d'adaptateur.
  3. Pensée fonctionnelle: modèles de conception fonctionnelle, partie 3 . Ici, ils parlent du modèle d'interprétation. Encore une fois, la langue cible est groovy.

L'article le plus pertinent pour votre question est certainement le premier, mais les deux autres peuvent néanmoins être des lectures intéressantes.

Riccardo T.
la source
Merci, mais je veux dire différents types de modèles, comme Monad, Arrow, Applicative no GoF.
Konstantin Solomatov
@KonstantinSolomatov: J'ai mal compris votre question, désolé. J'ai ajouté quelques références pour les monades et les flèches.
Riccardo T.
18

Jeremy Gibbons a un blog Patterns dans FP qui est destiné à devenir à peu près le livre que vous demandez. Bien sûr, ce n'est pas encore en état d'être aussi utile que vous pourriez le souhaiter tout à l'heure, mais il mérite quelques 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 confondent, ce site est un bon endroit pour aller au fond d'entre elles. Je sais que Brent le surveille. S'il n'atteint pas ses lecteurs, aidez-le.

pigworker
la source
5

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 fonctions, les fonctions applicatives et les monades, dans cet ordre. Ceci est utile - de nombreux didacticiels présentent les Functors, puis les Monades, puis ajoutent les Functors Applicatifs à la fin (s'ils le couvrent du tout). L'ordre dans LYAH est meilleur, car passer de Functors => Applicative Functors => Monads vous fait gravir progressivement les échelons de la généralité et du pouvoir.

  • Le chapitre 14 couvre les fermetures à glissière - vous pouvez effectivement les considérer comme des classes de conteneurs avec un pointeur vers une donnée spécifique, ce qui signifie que vous obtenez un accès O (1) et une mise à jour à l'emplacement du pointeur.

Il ne couvre pas les flèches ou les Comonads, qui sont un sujet plus avancé dans Haskell. Pour comprendre comment et pourquoi utiliser les flèches ou les comonades, vous devez absolument avoir déjà une solide compréhension des monades, donc je ne pense pas que ce soit un problème - LYAH est fermement destiné à l'extrémité débutante du marché Haskell.

Chris Taylor
la source
1
Oui, j'ai lu le livre. Je l 'ai beaucoup aimé. Malheureusement, il ne cache pas les flèches et de nombreux autres modèles avancés. Je souhaite également en savoir plus sur les monades et les applicatifs (par exemple, LYHGG ne couvre pas la monade de continuation).
Konstantin Solomatov