Uno dei principi della Programmazione Funzionale è l'uso delle Pure Functions. Una funzione Pura è quella che è senza effetti collaterali e referenzialmente trasparente.
Getters non sono referenzialmente trasparenti - se un Setter viene chiamato tra le chiamate al Getter, il valore di ritorno del Getter cambia anche se i suoi parametri non lo sono (in genere nessun parametro)
I setter producono effetti collaterali - Chiamare un Setter tipicamente manipola un valore che non è il suo valore di ritorno (in effetti, tradizionalmente un setter non restituisce nulla)
So che in Scala accettiamo semplicemente il fatto che stiamo mettendo insieme due paradigmi (funzionali e orientati agli oggetti) e usiamo i getter / setter come faremmo in un linguaggio come Java.
In una lingua come Haskell (che non conosco bene, ma mi è stato detto che è più vero per un linguaggio funzionale "puro"), sono solo curioso di sapere come modellare le proprietà sugli oggetti in modo tale che Getters sia referenziale trasparente e Setter sono senza effetto collaterale?
La soluzione sarebbe di restituire una copia dell'oggetto su cui il setter è stato invocato come valore di ritorno del setter e questa copia contiene la modifica al valore della proprietà?