Когда я читаю и реализую FRP, меня смущает семантика функции occs
в Event (упомянутая в статьях Conal Elliott). Это очень просто при работе со статическими (чистыми) событиями, но я не понимаю, как это работает с динамическими событиями (такими как нажатия кнопок мыши и т. д.). Например, если occs
возвращает все вхождения события, то, насколько я вижу, результатом для occs
для динамического события может быть одна из следующих вещей (поскольку еще не все вхождения известны):
- Известные события на момент вызова
- Массив/список, который автоматически обновляется вместе с самим событием
Конечно, оба они кажутся немного уродливыми — один нарушает семантическую чистоту, а другой вызывает побочные эффекты.
Не лучше ли просто удалить функцию occs
за пределами самой структуры FRP (т. е. сделать ее приватной для Event и всего, что ее расширяет)? Пока у Event есть функции отображения, фильтрации, слияния и т. д., которые возвращают дополнительные события, я чувствую, что его можно потерять без проблем. Или я что-то не так понимаю?