Предположим, что у меня есть событие trigger, которое я хочу сделать при запуске. Во-первых, я хочу, чтобы он обновлял значение некоторого поведения . Во-вторых, если выполняются другие условия, я хочу, чтобы оно активировало другое событие send_off с обновленным значением поведения. Выраженный в виде кода, предположим, что у меня
trigger :: Event b
trigger = ...
updateFromTrigger :: b -> (a -> a)
updateFromTrigger = ...
conditionFromTrigger :: b -> Bool
conditionFromTrigger = ...
behavior :: Behavior a
behavior = accumB initial_value (updateFromTrigger <$> trigger)
send_off :: Event a
send_off = ?????? (filterE conditionFromTrigger trigger)
Тогда возникает вопрос: что я ставлю в?????? так что send_off отправляет наиболее актуальное значение поведения, под которым я подразумеваю, что значение, которое включает обновление от триггера, которое было просто применяется к нему.
К сожалению, если я правильно понимаю, семантика поведения такова, что обновленное значение не доступно мне сразу, поэтому мой единственный вариант здесь состоит в том, чтобы дублировать работу и перепроверить обновленное значение поведения, чтобы я мог использовать его немедленно в другом случае, т.е. заполнить с чем-то вроде
send_off =
flip updateFromTrigger
<$>
behavior
<@>
filterE conditionFromTrigger trigger
Теперь есть смысл, в котором я могу сделать обновленную информацию в поведении, доступной мне сразу, используя дискретный, а не поведение, но на самом деле это просто эквивалентно даче мне события, которое запускается одновременно с мое оригинальное событие с обновленным значением, и, если я не пропустил что-то реактивно-банановое, не дает мне способ запустить событие только в том случае, когда одновременно происходят два других события; то есть он обеспечивает объединения событий, но не пересечений.
Итак, у меня есть два вопроса. Во-первых, правильно ли я понимаю эту ситуацию, и, в частности, я исхожу в заключение, что мое решение выше - единственный способ обойти это? Во-вторых, чисто из любопытства, были ли какие-либо мысли или планы разработчиков о том, как иметь дело с пересечениями событий?