Большинство проблем, которые я должен решить в своей работе в качестве разработчика, имеют отношение к моделированию данных. Например, в мире веб-приложений OOP мне часто приходится изменять свойства данных, которые находятся в объекте для удовлетворения новых требований.
Если мне повезет, мне даже не нужно программно добавлять новый код поведения (функции, методы). Вместо этого я могу декларативно добавлять проверки и даже параметры пользовательского интерфейса, аннотируя свойство (Java).
В функциональном программировании кажется, что для добавления новых свойств данных требуется много изменений кода из-за соответствия шаблонов и конструкторов данных (Haskell, ML).
Как свести к минимуму эту проблему?
Это, по-видимому, признанная проблема: Ксавье Лерой хорошо говорит на стр. 24 "Объекты и классы против модулей" - Чтобы обобщить те, у которых нет средства просмотра PostScript, в основном говорят, что языки FP лучше, чем языки ООП, для добавления нового поведения по объектам данных, но языки ООП лучше подходят для добавления новых объектов/свойств данных.
Есть ли какой-либо шаблон проектирования, используемый в языках FP, чтобы облегчить эту проблему?
Я читал Phillip Wadler рекомендацию использования Monads, чтобы помочь решить эту проблему модульности, но я не уверен, что понимаю, как?