В ОО-системе я мог иметь объект «Данные» и делиться ссылкой с несколькими другими объектами. Если я обновлю объект данных, любой объект со ссылкой увидит обновленные данные.
В чистой системе FP у нас есть проблема, когда для любой структуры данных мы можем спросить: «Должна ли она хранить такие-то или такие данные, или мы должны ожидать, что данные будут переданы?»
например. Я должен решить, если это нормально иметь что-то вроде:
students : Dict StudentId Student
toString : Dict StudentId Student -> StudentId -> Maybe String
или лучше иметь
studentIds : Set StudentId
toString : (StudentId -> Maybe Student) -> StudentId -> Maybe String
Первый рискует дублировать отношения или данные, или иметь разные истины.