In letzter Zeit habe ich über Monaden auf eine andere Art und Weise nachgedacht. Ich betrachte sie als Abstraktion von Ausführungsanordnung in einer mathematischen Weise, die neue Arten von Polymorphismus ermöglicht.
Wenn Sie eine imperative Sprache verwenden und einige Ausdrücke in der richtigen Reihenfolge schreiben, wird der Code IMMER genau in dieser Reihenfolge ausgeführt.
Und im einfachen Fall, wenn Sie eine Monade verwenden, fühlt es sich genauso an - Sie definieren eine Liste von Ausdrücken, die in der Reihenfolge passieren. Je nachdem, welche Monade Sie verwenden, könnte Ihr Code jedoch der Reihe nach ablaufen (wie in der IO-Monade), parallel über mehrere Elemente auf einmal (wie in der Listen-Monade), er könnte auf halbem Weg anhalten (wie in der Maybe-Monade), er könnte auf halbem Weg pausieren, um später wieder aufgenommen zu werden (wie in einer Resumption-Monade), er könnte zurückspulen und von vorne beginnen (wie in einer Transaktions-Monade), oder er könnte auf halbem Weg zurückspulen, um andere Optionen auszuprobieren (wie in einer Logik-Monade).
Und da Monaden polymorph sind, ist es möglich, denselben Code in verschiedenen Monaden auszuführen, je nach Bedarf.
Außerdem ist es in einigen Fällen möglich, Monaden miteinander zu kombinieren (mit Monadentransformatoren), um mehrere Funktionen gleichzeitig zu erhalten.
13 Stimmen
Eric Lippert schrieb eine Antwort auf diese Fragen ( stackoverflow.com/questions/2704652/ ), die aufgrund einiger Probleme auf einer separaten Seite zu finden ist.
74 Stimmen
Hier ist eine neue Einführung in die Verwendung von Javascript - ich fand sie sehr lesenswert.
7 Stimmen
Siehe auch Verschiedene Arten, eine Monade zu sehen .
27 Stimmen
Siehe auch Monaden in Bildern
3 Stimmen
Eine Monade ist eine Reihe von Funktionen mit Hilfsoperationen. Siehe diese Antwort
0 Stimmen
Ein weiterer schneller Artikel, der der Antwort von sigfpe ähnelt: github.com/quchen/articles/blob/master/
0 Stimmen
Siehe meinen Artikel über FPComplete, in dem ich erkläre, WARUM man Monaden verwenden sollte (nicht wie sie funktionieren): bit.ly/MH9zRD
2 Stimmen
Die beste Erklärung, die ich bisher gehört habe, stammt von wikipedia: "Monaden sind programmierbare Semikolons."
0 Stimmen
Ich bin auf diesen Artikel gestoßen: stephanboyer.com/post/9/monads-part-1-a-design-pattern . Ich fand es ist die beste und effizienteste Konzeptvermittlung für Laien wie mich bisher. Der Autor hat eigentlich auch andere Artikel für Monaden.
0 Stimmen
Eine äußerst leicht verständliche Erklärung von Douglas Crockford: youtube.com/watch?v=dkZFtimgAcM
0 Stimmen
Monade ist kein Haskell-spezifisches Konzept, @HelderPereira. Ihr Retag scheint mir falsch zu sein.
1 Stimmen
@Palec Ich weiß, aber in der Frage wird Haskell erwähnt, und die am häufigsten gewählte Antwort verwendet Haskell, um sie zu erklären. Ich dachte nur, es wäre nützlich, um es für Leute, die Haskell lernen, einfacher zu machen, es zu finden, da dies ein sehr wichtiges Konzept der Sprache ist. Es steht Ihnen jedoch frei, es zu entfernen, wenn Sie denken, dass es keinen Sinn macht.
0 Stimmen
Ich möchte sagen, dass Monade ist eine Konstruktion, die Sie alle Ihre Mist in (tun tatsächlichen Job, aka Nebenwirkungen), und präsentieren Sie eine schicke Box, um Ihren Code functionnal (lesen Sie Nebeneffekt frei).
0 Stimmen
Monad ist EDSL. Siehe este : "Irgendwann bemerkte jemand: "Oh, um unreine Effekte aus reinem Code zu erhalten, muss ich Metaprogrammierung betreiben, was bedeutet, dass einer meiner Typen 'Programme, die ein X berechnen' sein muss. Ich möchte ein 'Programm, das ein X berechnet' und eine Funktion, die ein X nimmt und das nächste Programm erzeugt, ein 'Programm, das ein Y berechnet', nehmen und sie irgendwie zu einem 'Programm, das ein Y berechnet' zusammenfügen" (das ist die Bindungsoperation). Die IO-Monade war geboren."
0 Stimmen
Dieser Artikel von Tomasz Nurkiewicz ist die beste Erklärung, die ich für Java-Entwickler gefunden habe.
0 Stimmen
Kürzer: Monade ist (eingebettetes) Interpreter-Muster (wobei Anweisungen der zu interpretierenden Sprache erstklassige Werte unserer Programmiersprache selbst sind).
0 Stimmen
Monaden sind eingebettete domänenspezifische Sprachen, die Anweisungen (Semikolons) enthalten. Die Semikolons können Anweisungen in traditionellen prozeduralen Sprachen, Joins in SQL oder was immer Sie wollen darstellen. Da man Monaden zusammenführen kann, um Sprachen mit einer reicheren Semantik zu bilden, oder Monaden aufteilen kann, kann man Monaden auch als die SEMANTIK der Sprachen selbst betrachten.
2 Stimmen
Leider ist eine Monade eine Sache, die nur von Leuten erklärt werden kann, die nicht wissen, wie man etwas erklärt.