In una risposta a questa domanda (scritta da Pete) ci sono alcune considerazioni su OOP rispetto a FP. In particolare, si suggerisce che i linguaggi FP non sono molto adatti per la modellazione di oggetti (persistenti) che hanno un'identità e uno stato mutabile.
Mi chiedevo se questo fosse vero o, in altre parole, come si modellerebbero gli oggetti in un linguaggio di programmazione funzionale. Dalla mia conoscenza di base di Haskell ho pensato che si potesse usare la monade in qualche modo, ma io non ne so abbastanza su questo argomento per trovare una risposta chiara.
Quindi, in che modo le entità con un'identità e uno stato persistente mutevole vengono normalmente modellate in un linguaggio funzionale?
Ecco alcuni dettagli per chiarire che cosa ho in mente. Prendi una tipica applicazione Java in cui posso (1) leggere un record da una tabella di database in un oggetto Java, (2) modificare l'oggetto in modi diversi, (3) salvare l'oggetto modificato nel database.
Come sarebbe implementato, ad es. in Haskell? Inizialmente leggo il record in un valore record (definito da una definizione di dati), eseguo trasformazioni diverse applicando funzioni a questo valore iniziale (ogni valore intermedio è una nuova copia modificata del record originale) e quindi scrivo il valore record finale al database.
Questo è tutto ciò che c'è da fare? Come posso garantire che in ogni momento solo una copia del record sia valida / accessibile? Uno non vuole avere diversi valori immutabili che rappresentano diverse istantanee dello stesso oggetto per essere accessibili allo stesso tempo.