Trong câu trả lời cho câu hỏi này (được viết bởi Pete), có một số cân nhắc về OOP so với FP. Cụ thể, có ý kiến cho rằng các ngôn ngữ FP không phù hợp lắm để mô hình hóa các đối tượng (liên tục) có bản sắc và trạng thái có thể thay đổi.
Tôi đã tự hỏi nếu điều này là đúng hay nói cách khác, làm thế nào người ta sẽ mô hình hóa các đối tượng trong một ngôn ngữ lập trình chức năng. Từ kiến thức cơ bản của tôi về Haskell, tôi nghĩ rằng người ta có thể sử dụng các đơn vị theo một cách nào đó, nhưng tôi thực sự không biết đủ về chủ đề này để đưa ra một câu trả lời rõ ràng.
Vì vậy, làm thế nào các thực thể có bản sắc và trạng thái bền bỉ có thể thay đổi thường được mô hình hóa bằng ngôn ngữ chức năng?
Dưới đây là một số chi tiết để làm rõ những gì tôi có trong tâm trí. Lấy một ứng dụng Java điển hình trong đó tôi có thể (1) đọc bản ghi từ bảng cơ sở dữ liệu vào đối tượng Java, (2) sửa đổi đối tượng theo các cách khác nhau, (3) lưu đối tượng đã sửa đổi vào cơ sở dữ liệu.
Làm thế nào điều này sẽ được thực hiện, ví dụ như trong Haskell? Ban đầu tôi sẽ đọc bản ghi thành một giá trị bản ghi (được xác định bởi định nghĩa dữ liệu), thực hiện các phép biến đổi khác nhau bằng cách áp dụng các hàm cho giá trị ban đầu này (mỗi giá trị trung gian là một bản sao mới, được sửa đổi của bản ghi gốc) và sau đó viết giá trị bản ghi cuối cùng đến cơ sở dữ liệu.
Đây có phải là tất cả không? Làm thế nào tôi có thể đảm bảo rằng tại mỗi thời điểm chỉ có một bản sao của hồ sơ là hợp lệ / có thể truy cập được? Người ta không muốn có các giá trị bất biến khác nhau đại diện cho các ảnh chụp nhanh khác nhau của cùng một đối tượng có thể truy cập cùng một lúc.