Ich lerne die Programmiersprache Haskell. Nach dem, was ich lese, stellt Input / Ouput ( IO ) die Reinheit von Haskell vor Herausforderungen, da wir per Definition mit der Außenwelt interagieren. Aus Wikipedia:
In einer rein funktionalen Sprache wie Haskell können Funktionen im Rahmen der Funktionssemantik keine äußerlich sichtbaren Nebenwirkungen haben. Obwohl eine Funktion keine Nebenwirkung direkt verursachen kann, kann sie einen Wert erstellen, der eine gewünschte Nebenwirkung beschreibt, die der Aufrufer zu einem geeigneten Zeitpunkt anwenden sollte.
In der Haskell-Notation stellt ein Wert vom Typ IO a eine Aktion dar, die bei Ausführung einen Wert vom Typ a erzeugt.
Bald erfuhr ich, dass IO ein Beispiel für eine Haskell-Monade ist. Obwohl wir nicht viele Erklärungen bekommen, was Monaden sind. Von Functors, Applicatives und Monaden in Bildern
So lernen Sie Monaden kennen:
- Promotion in Informatik.
- Wirf es weg, weil du es für diesen Abschnitt nicht brauchst!
Inzwischen habe ich verschiedene Definitionen von gelesen - dass sie Kontext hinzufügen oder kleinere Programmiersprachen innerhalb einer großen um ein bestimmtes Konzept erstellen. Ich versuche immer noch ein Gefühl dafür zu bekommen, welche Monaden und wie diese Ideen angewendet werden.
In Haskell gibt monad
es eine andere Typklasse, die im Grunde nur von einer Regel definiert wird. Und IO
ist ein Beispiel dafür.
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
/programming/44965/what-is-a-monad
Ist hier etwas Algebraisches los? Was ist so algebraisch an IO?
Ich entschuldige mich dafür, dass ich sprachspezifisch bin. Ich hoffe, dass der größte Teil dieser Diskussion für alle funktionalen Programmiersprachen gilt. Alle Fehler in meiner Diskussion stellen mein eigenes begrenztes Verständnis dieses Bereichs dar.
Es gibt eine andere Definition von Monade, die ich in nLab gefunden habe und die nicht einmal spezifisch für Programmiersprachen ist.
In einer separaten Frage möchte ich verstehen, wie der kategorietheoretische Begriff der Monade mit der CS-Definition im Fall von Haskell übereinstimmt.