Несколько замечаний по этому поводу:
Я не уверен, как это делается, но есть нечто, называемое « функционально-реактивное программирование », которое доступно в виде библиотеки для многих функциональных языков.На самом деле это более или менее правильно сделанный шаблон наблюдателя.
Также шаблон наблюдателя обычно используется для уведомления об изменениях состояния, как в различных реализациях MVC.Однако в функциональном языке нет прямого способа сделать изменения состояния, если вы не используете некоторые приемы, такие как монады, для симуляции состояния.Однако, если вы смоделируете изменения состояния, используя монады, вы также получите очки, в которые вы можете добавить механизм наблюдения внутри монады.
Судя по опубликованному вами коду, кажется, что вы на самом деле делаете программирование, управляемое событиями.Таким образом, шаблон наблюдателя является типичным способом получения событийно-ориентированного программирования на объектно-ориентированных языках.Таким образом, у вас есть цель (программирование на основе событий) и инструмент в объектно-ориентированном мире (шаблон наблюдателя).Если вы хотите использовать все возможности функционального программирования, вам следует проверить, какие другие методы доступны для достижения этой цели, вместо того, чтобы напрямую переносить инструмент из объектно-ориентированного мира (это может быть не лучшим выбором для функционального языка).Просто проверьте, какие другие инструменты доступны здесь, и вы, вероятно, найдете что-то, что намного лучше соответствует вашим целям.