Jednym z założeń programowania funkcjonalnego jest stosowanie funkcji czystych. Funkcja Pure to taka, która nie powoduje skutków ubocznych i jest względnie przezroczysta.
Gettery nie są referencyjnie przezroczyste - jeśli Setter jest wywoływany między wywołaniami Gettera, wartość zwrotna Gettera zmienia się, mimo że jego parametry nie (zwykle nie ma parametrów)
Setery wywołują skutki uboczne - Wywołanie Setera zwykle manipuluje wartością, która nie jest jego wartością zwracaną (w rzeczywistości, tradycyjnie setter nic nie zwraca)
Wiem, że w Scali po prostu akceptujemy fakt, że łączymy ze sobą dwa paradygmaty (funkcjonalny i obiektowy) i używamy getterów / setterów tak, jak robilibyśmy w języku takim jak Java.
W języku takim jak Haskell (z którym nie jestem biegły, ale powiedziano mi, że bardziej odpowiada „czystemu” językowi funkcjonalnemu) jestem po prostu ciekawy, w jaki sposób można modelować właściwości obiektów, tak aby Getters były referencyjnie przezroczyste, a Settery są wolne od skutków ubocznych?
Czy rozwiązaniem byłoby przekazanie z powrotem kopii obiektu, na który wywołano setera, jako wartości zwracanej przez setera, a ta kopia zawiera zmianę wartości właściwości?