In einer Antwort auf diese Frage (geschrieben von Pete) gibt es einige Überlegungen zu OOP im Vergleich zu FP. Insbesondere wird vorgeschlagen, dass FP-Sprachen nicht sehr gut zum Modellieren von (persistenten) Objekten geeignet sind, die eine Identität und einen veränderlichen Zustand haben.
Ich habe mich gefragt, ob dies wahr ist oder mit anderen Worten, wie man Objekte in einer funktionalen Programmiersprache modellieren würde. Aufgrund meiner Grundkenntnisse in Haskell dachte ich, man könnte Monaden auf irgendeine Weise verwenden, aber ich weiß wirklich nicht genug über dieses Thema, um eine klare Antwort zu finden.
Wie werden Entitäten mit einer Identität und einem veränderlichen persistenten Zustand normalerweise in einer funktionalen Sprache modelliert?
Hier sind einige weitere Details, um zu verdeutlichen, was ich vorhabe. Nehmen Sie eine typische Java-Anwendung, in der ich (1) einen Datensatz aus einer Datenbanktabelle in ein Java-Objekt einlesen kann, (2) das Objekt auf verschiedene Arten ändern kann, (3) das geänderte Objekt in der Datenbank speichern kann.
Wie würde dies zB in Haskell umgesetzt? Ich würde den Datensatz zunächst in einen Datensatzwert einlesen (definiert durch eine Datendefinition), verschiedene Transformationen durchführen, indem ich Funktionen auf diesen Anfangswert anwende (jeder Zwischenwert ist eine neue, modifizierte Kopie des ursprünglichen Datensatzes) und dann den endgültigen Datensatzwert schreiben in die Datenbank.
Ist das alles was dazu gehört? Wie kann ich sicherstellen, dass zu jedem Zeitpunkt nur eine Kopie des Datensatzes gültig / zugänglich ist? Man möchte nicht, dass unterschiedliche unveränderliche Werte unterschiedliche Schnappschüsse desselben Objekts darstellen, um gleichzeitig zugänglich zu sein.