Salah satu prinsip Pemrograman Fungsional adalah penggunaan Fungsi Murni. Fungsi Murni adalah fungsi yang bebas efek samping dan transparan referensial.
Getters tidak transparan secara referensi - jika seorang Setter dipanggil di antara panggilan ke Getter, nilai pengembalian Getter berubah meskipun parameternya tidak (biasanya tidak ada parameter)
Setter menghasilkan efek samping - Memanggil Setter sebuah biasanya memanipulasi nilai yang tidak nilai kembali (pada kenyataannya, secara tradisional setter kembali apa-apa)
Saya tahu di Scala kita hanya menerima kenyataan bahwa kita menyatukan dua paradigma (fungsional dan berorientasi objek) dan menggunakan getter / setter seperti yang kita lakukan dalam bahasa seperti Java.
Dalam bahasa seperti Haskell (yang saya tidak fasih, tapi saya diberitahu memegang lebih benar untuk bahasa fungsional "Murni") Saya hanya ingin tahu, bagaimana Anda akan memodelkan properti pada objek sedemikian sehingga Getters secara referensial transparan dan Setter apakah efek sampingnya gratis?
Apakah solusinya dengan mengembalikan salinan objek yang ditetapkan oleh setter sebagai nilai pengembalian setter, dan salinan ini berisi perubahan ke nilai properti?