Một trong những nguyên lý của Lập trình hàm là việc sử dụng Hàm thuần túy. Hàm Pure là một hàm không có tác dụng phụ và trong suốt về mặt tham chiếu.
Getters không trong suốt về mặt tham chiếu - nếu Setter được gọi giữa các lệnh gọi đến Getter, giá trị trả về của Getter thay đổi ngay cả khi các tham số của nó không (thường không có tham số)
Setters tạo ra các hiệu ứng phụ - Gọi một Setter thường thao túng một giá trị không phải là giá trị trả về của nó (trên thực tế, theo truyền thống, một setter không trả về gì cả)
Tôi biết trong Scala, chúng ta chỉ chấp nhận thực tế là chúng ta đang kết hợp hai mô hình (hướng theo chức năng và đối tượng) và sử dụng getters / setters như trong ngôn ngữ như Java.
Trong một ngôn ngữ như Haskell (mà tôi không thông thạo, nhưng tôi được bảo là có ngôn ngữ chức năng "thuần túy") Tôi chỉ tò mò, làm thế nào bạn mô hình hóa các thuộc tính trên các đối tượng sao cho Getters trong suốt và Setters Có tác dụng phụ miễn phí?
Giải pháp sẽ là trả lại một bản sao của đối tượng mà setter được gọi là giá trị trả về của setter và bản sao này có chứa thay đổi đối với giá trị thuộc tính không?