„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Monogramme sind Monolithen in der Kategorie der Functors ...

Monogramme sind Monolithen in der Kategorie der Functors ...

Gepostet am 2025-04-13
Durchsuche:914

A monad is a monoid in the category of endofunctors...

Was ist ein Monad?

Ein Monad ist ein monoid in der Kategorie von endofunkors ...?

... lass es uns noch einmal versuchen:

Eine Monate ist eine Abstraktion, die in der funktionalen Programmierung verwendet wird, um Berechnungen konsistent zu verarbeiten. Es ist ein Entwurfsmuster, das das Erhalten von Operationen bei gleichzeitiger Einkapselung von Nebenwirkungen wie Zustandsänderungen, E/O oder Fehler auf kontrollierte Weise ermöglicht.

.

monaden können als eine Möglichkeit angesehen werden, Werte zu wickeln und Funktionen auf sie anzuwenden, um sicherzustellen, dass Berechnungen in einer vorhersehbaren und kontrollierten Umgebung durchgeführt werden.

Mein persönliches Verständnis ist: Eine Monate ist eine Datenstruktur mit
  • ein einzelner, unveränderlicher Wert (oder Funktion)
  • Eine Karte/Bindefunktion, um eine Funktion diesem Wert zuzuordnen
  • Eine Rückkehr/Flachung, die den neuen Staat jedes Mal in eine neue Monate zurückgibt

Dies ermöglicht die Erhöhung und Zusammensetzung von Operationen auf eine Weise, die Unveränderlichkeit und funktionale Reinheit bewahrt-ein "umgekehrter" Ansatz für eine Klasse, bei dem der Zustand nicht an Platz geändert werden kann, aber Transformationen funktional angewendet werden, um neue Instanzen zu erzeugen.

.

Diese "reverse Symmetrie" hebt den Kontrast hervor:
  • Klassen ändern ihren internen Zustand, die Veränderbarkeit und direkte Interaktion durch interne Methoden beibehalten. Sie interagieren die meiste Zeit mit einem globalen Zustand
  • monaden erreichen ähnliche Ergebnisse wie eine Klasse, aber indem sie Werte einwickeln und externe unveränderliche Transformationen abgeben, haben sie keine Nebenwirkungen: Es gibt keinen globalen Zustand

Beispiel:
  • Klasse: Eine Boxklasse enthält einen Wert, und Sie können den Wert ändern, indem Sie Methoden wie SetValue (NewValue) aufrufen, die den internen Status des Feldes mutiert.
  • monad: Ein Boxmonad würde einen Wert auf unveränderliche Weise halten. Um den Wert zu verwandeln, würden Sie eine Funktion wie Karte verwenden, die eine externe Funktion auf den Wert anwendet und ein neues Boxmonad mit dem neuen Wert zurückgibt.


Beispielprojekt in Python:

https://github.com/blackopsrepl/py-monad-task-manager..&&&]

In dieser Anwendung verwenden wir den staatlichen Monad, um den Status der Aufgabenliste zu verwalten. Die staatliche Monad bietet eine Möglichkeit, den Aufgabenmanagementprozess als eine Reihe von Transformationen in den Zustand der Anwendung zu modellieren und gleichzeitig den Staat selbst unveränderlich zu halten.

Anstatt den Status der Aufgabenliste direkt zu ändern, verwenden wir die Funktion return_, um den Ausgangszustand in einen monadischen Container zu wickeln, und die Bindungsfunktion, um Transformationen auf vorhersehbare Weise auf den Zustand anzuwenden. Jedes Mal, wenn eine Operation ausgeführt wird (z. B. Hinzufügen, Bearbeiten oder Löschen von Aufgaben), wird eine neue Instanz des Staates zurückgegeben, wodurch die Unveränderlichkeit und Zwangsfähigkeit gewährleistet werden.

Schlüsselfunktionen:

  • return_: Wickelt einen Wert in einen monadischen Container, wodurch er Teil der monadischen Berechnungskette ist.
  • bind: wendet eine Funktion auf den Wert innerhalb der Monate an und gibt einen neuen monadischen Container mit dem transformierten Wert zurück.

Durch die Verwendung des staatlichen Monades können wir Aufgabenverwaltungsvorgänge so behandeln, dass der Staat immutnungsgemäß aktualisiert wird und Berechnungen ohne Nebenwirkungen oder unerwünschte Interaktionen zwischen Operationen komponiert werden.

Freigabeerklärung Dieser Artikel ist nachgedruckt unter: https://dev.to/blacopsrepl/a-monad-is-a-monoid-in-the-category-of-endofUNctors-47oi?1 Wenn es zu Verletzungen besteht, wenden Sie sich bitte an [email protected], um ihn zu löschen.
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3