Um dos princípios da programação funcional é o uso de funções puras. Uma função Pure é aquela que é livre de efeitos colaterais e é referencialmente transparente.
Os Getters não são referencialmente transparentes - se um Setter é chamado entre as chamadas para o Getter, o valor de retorno do Getter muda mesmo que seus parâmetros não (normalmente nenhum parâmetro)
Os setters produzem efeitos colaterais - chamar um setter normalmente manipula um valor que não é seu valor de retorno (na verdade, tradicionalmente, um setter não retorna nada)
Eu sei que em Scala nós apenas aceitamos o fato de estarmos juntando dois paradigmas (funcional e orientado a objetos) e usamos getters / setters como faríamos em uma linguagem como Java.
Em uma linguagem como Haskell (com a qual eu não sou fluente, mas me dizem que é mais fiel a uma linguagem funcional "Pura"), estou curioso para saber como você modelaria propriedades em objetos de forma que Getters sejam referencialmente transparentes e Setters são livres de efeitos colaterais?
A solução seria devolver uma cópia do objeto no qual o setter foi chamado como o valor de retorno do setter, e essa cópia contém a alteração no valor da propriedade?