Funktionale Entwurfsmuster [geschlossen]

106

Es gibt viele funktionale Redewendungen: Monaden, Applikative, Pfeile usw. Sie sind in verschiedenen Artikeln dokumentiert, aber leider kenne ich kein Buch oder Artikel, in dem sie an einem Ort zusammengefasst sind (es gibt Typeclassopedia, aber es gibt viele von Bereichen, die nicht gut abgedeckt sind). Kann jemand einen Artikel / ein Buch empfehlen, der / das sie an einem Ort gut abdeckt und der einem Programmierer mit fortgeschrittenen FP-Kenntnissen zugänglich ist?

Konstantin Solomatov
quelle
Es beantwortet Ihre Frage nicht direkt, aber diese andere Frage enthält einige interessante Informationen (und mindestens ein oder zwei Links): stackoverflow.com/questions/327955/…
reuben
15
Könnten Sie näher erläutern, welche Bereiche Ihrer Meinung nach in der Typeclassopedia nicht gut abgedeckt sind?
Dave4420
2
@ dave4420 Wenn ich Typeclassopedia von Anfang bis Ende lese, verstehe ich umso weniger, je mehr ich lese. Die ersten Abschnitte sind wirklich gut, aber die letzten Abschnitte sind für mich kaum lesbar.
Konstantin Solomatov
3
@KonstantinSolomatov Möglicherweise müssen Sie die Abschnitte, die Sie nicht verstehen, recherchieren, sich Blog-Beiträge ansehen und den Code genau betrachten. Alle diese "Designmuster" in der Typeclassopedia sind wirklich Abstraktionen, und oft tiefe, die manchmal eine Weile dauern, bis sie sich festsetzen.
Jberryman
1
@DanBurton nicht sicher, ob Sie meinen Kommentar falsch verstanden haben, aber ich würde all diese als tiefe Abstraktionen kategorisieren, obwohl es leicht zu vergessen ist, wenn Sie Ihr "Ah ha!" Moment.
Jberryman

Antworten:

35

Mein Vorschlag ist, wenn Sie Scala lernen möchten, das Buch von Paul Chiusano und Runar Bjarnason zu lesen:

http://manning.com/bjarnason/

Teil II: Funktionsdesign und Kombinatorbibliotheken

  1. Kleine Sprachen machen
  2. JSON-Serialisierung
  3. Spezifikationsbasierte Tests
  4. Parser
  5. Rein funktionale Parallelität
  6. Rein funktioneller Zustand

Teil III: Funktionale Entwurfsmuster

  1. Der Fall für die Abstraktion
  2. Monoide
  3. Funktoren
  4. Monaden
  5. Anwendbare Funktoren
  6. Durchquerbare und faltbare Datenstrukturen
  7. Comonaden

Teil IV: Regeln brechen: Effekte und E / A.

  1. Effekte vs. Nebenwirkungen
  2. Stream-Verarbeitung und inkrementelle E / A.
  3. Erzwingen des Effekt-Scoping mit dem Typsystem
Edmondo1984
quelle
31

Es tut mir leid, dass ich keine Artikel oder Bücher kenne, die die verschiedenen Verwendungen für all diese Konstrukte detailliert behandeln, aber ich kann Ihnen einige Links zu einzelnen Ressourcen geben.

Ein weit verbreitetes Muster besteht darin, Monadentransformatoren anstelle einfacher Monaden zu bauen (siehe auch den Link im nächsten Absatz). Es bedeutet im Grunde, dass Sie etwas bauen, das mit anderen Monaden kombiniert werden muss, was zu einer komplexeren Monade führt, die die Funktionen beider Monaden verarbeiten kann.

In Real World Haskell gibt es einige Kapitel über Monaden. In Kapitel 14. Monaden erklären die Autoren die Grundlagen und einige gebräuchliche Verwendungen (möglicherweise Liste, Zustand). Kapitel 15. Das Programmieren mit Monaden enthält weitere Erklärungen zu deren effektiver Verwendung (es behandelt auch die Lesermonade). Im folgenden Kapitel wird die Verwendung von Parsec erläutert. Es kann jedoch interessanter sein, nach Artikeln zu suchen, die die tatsächliche Funktionsweise von Paraden beschreiben: Es sollte ein wirklich gutes Beispiel für eine gut organisierte Verwendung von Monaden zum Parsen sein. Fianlly, Kapitel 18. Monadentransformatorenstellt vor, wie Monadentransformatoren funktionieren, und zeigt dann Schritt für Schritt, wie man einen erstellt. Interessant sind auch die Überlegungen zu den letzten Abschnitten des Kapitels.

Ich habe einmal eine wirklich interessante Frage zu SO über den kreativen Einsatz von Monaden gelesen . Die vorgeschlagenen Links waren großartige Lektüren zum Thema. Mit diesem Geist habe ich versucht, dasselbe nach Pfeilen zu fragen : Ich habe definitiv weniger Antworten als die auf Monaden bekommen, aber trotzdem interessante.


In Bezug auf OOP-Muster der vierköpfigen Gruppe gibt es in ihrer Reihe Functional Thinking eine Reihe von drei Artikeln von IBM zu diesem Thema . Die Zielfunktionssprache ist Scala. Anschließend erklären sie die üblichen Entwurfsmuster in OOP und zeigen, wie sie in Scala abgebildet werden.

  1. Funktionales Denken: Funktionale Entwurfsmuster, Teil 1 . Hier decken sie Fabriken, Vorlagenmethoden, Strategie, Fliegengewicht ab. Das Fazit ist, dass durch Funktionen als erstklassige Werte alles viel einfacher ist.
  2. Funktionales Denken: Funktionale Entwurfsmuster, Teil 2 . Hier geht es um Java und Groovy . Es adressiert das Adaptermuster.
  3. Funktionales Denken: Funktionale Entwurfsmuster, Teil 3 . Hier sprechen sie über das Interpretermuster. Auch hier ist die Zielsprache groovig.

Der relevanteste Artikel für Ihre Frage ist sicherlich der erste, aber die beiden anderen können dennoch interessante verwandte Lesarten sein.

Riccardo T.
quelle
Danke, aber ich meine verschiedene Arten von Mustern, wie Monade, Pfeil, Anwendbar, keine GoF-Muster.
Konstantin Solomatov
@KonstantinSolomatov: Ich habe deine Frage falsch verstanden, sorry. Ich habe einige Referenzen für Monaden und Pfeile hinzugefügt.
Riccardo T.
18

Jeremy Gibbons hat einen Patterns in FP-Blog, der irgendwann so ziemlich das Buch werden soll, nach dem Sie fragen. Natürlich ist das noch nicht in der Lage, so nützlich zu sein, wie Sie es sich gerade wünschen, aber er verdient etwas Ermutigung!

In der Zwischenzeit sage ich +1 für Brent Yorgeys Typeclassopedia. Es ist wirklich nützlich, und wenn es spätere Teile gibt, die verwirren, ist diese Seite ein guter Ort, um ihnen auf den Grund zu gehen. Ich weiß, dass Brent es überprüft. Wenn er seine Leser nicht erreicht, geben Sie ihm Hilfe.

Schweinearbeiter
quelle
5

Haben Sie die späteren Kapitel von Learn You a Haskell for Great Good gelesen ?

  • Kapitel 6 behandelt Karten und Falten, die zwei der wichtigsten "Entwurfsmuster" in funktionalen Sprachen sind.

  • In den Kapiteln 11-13 werden Funktoren, anwendbare Funktoren und Monaden in dieser Reihenfolge behandelt. Dies ist hilfreich - in vielen Tutorials werden Functors und dann Monaden vorgestellt und am Ende Applicative Functors angeheftet (sofern sie überhaupt behandelt werden). Die Reihenfolge in LYAH ist besser, denn wenn Sie von Functors => Applicative Functors => Monaden wechseln, steigen Sie allmählich die Leiter der Allgemeinheit und Macht hinauf.

  • Kapitel 14 behandelt Reißverschlüsse - Sie können sich diese effektiv als Containerklassen mit einem Zeiger auf ein bestimmtes Datenelement vorstellen, was bedeutet, dass Sie O (1) -Zugriff erhalten und an der Zeigerposition aktualisieren.

Es werden keine Pfeile oder Comonaden behandelt, die in Haskell ein fortgeschritteneres Thema sind. Um zu verstehen, wie und warum man Pfeile oder Comonaden verwendet, sollte man Monaden auf jeden Fall bereits gut verstehen, daher denke ich nicht, dass dies ein Problem ist - LYAH ist fest auf das Anfänger-Ende des Haskell-Marktes ausgerichtet.

Chris Taylor
quelle
1
Ja, ich habe das Buch gelesen. Ich mochte es sehr. Leider verdeckt es keine Pfeile und viele andere fortgeschrittene Muster. Ich möchte auch mehr über Monaden und Applikative lesen (zum Beispiel behandelt LYHGG keine Fortsetzung Monade).
Konstantin Solomatov