L'un des principes de la programmation fonctionnelle est l'utilisation de fonctions pures. Une fonction Pure est une fonction sans effets secondaires et transparente par référence.
Les Getters ne sont pas référentiellement transparents - si un Setter est appelé entre des appels au Getter, la valeur de retour du Getter change même si ses paramètres ne l'ont pas (généralement pas de paramètres)
Les setters produisent des effets secondaires - L'appel d'un Setter manipule généralement une valeur qui n'est pas sa valeur de retour (en fait, traditionnellement, un setter ne renvoie rien)
Je sais qu'à Scala, nous acceptons simplement le fait que nous entremêlons deux paradigmes (fonctionnels et orientés objet) et utilisons des getters / setters comme nous le ferions dans un langage comme Java.
Dans un langage comme Haskell (avec lequel je ne parle pas couramment, mais on me dit que c'est plus vrai pour un langage fonctionnel "pur"), je suis juste curieux de savoir comment vous modéliseriez des propriétés sur des objets tels que les Getters sont référentiellement transparents et les Setters les effets secondaires sont-ils libres?
La solution consisterait-elle à renvoyer une copie de l'objet sur lequel le setter a été invoqué comme valeur de retour du setter, et cette copie contient la modification de la valeur de la propriété?