Я пытаюсь понять, как моделировать события в ClojureScript. Спроектировать очередь событий в JavaScript очень просто. Вы просто сохраняете (изменяемый) массив функций и предоставляете вспомогательные функции для добавления или удаления обратных вызовов из массива. Когда вы инициируете событие, просто просмотрите все обратные вызовы, перечисленные в массиве, и вызовите их один за другим.
Эта парадигма далека от функционального стиля — например, нет смысла запускать обратные вызовы, если они не имеют побочных эффектов. Более того, это реализовано с использованием изменяемого массива. Тем не менее мне кажется, что в ClojureScript нужно уметь программировать, управляемое событиями, чтобы делать что-то полезное.Теперь я знаю, что Google Closure уже реализует библиотеку событий, но мой вопрос касается ее реализации изначально.
Поскольку все основные типы данных Clojure/ClojureScript являются неизменяемыми, каким идиоматическим способом можно было бы реализовать этот механизм? Сменить реферала? Прибегаете к изменяемым структурам данных с хоста (Java или JavaScript)?
Если я правильно понимаю, агенты, возможно, являются правильным инструментом в Clojure, но я вижу, что в настоящее время они не реализованы в ClojureScript.