Многократное возникновение события одновременно

В статье Конала Эллиотта Событие определяется как

type Event a = [(T , a)] -- for non-decreasing times

Это позволит более одного события за раз. В моей библиотеке FRP я хотел бы реализовать функцию:

sample :: Reactive a -> Future () -> Future a

Это будет пробовать реактивное, когда будущее срабатывает. Поскольку реактив может иметь более одного значения в момент, когда срабатывает будущее, как мне его реализовать? Всегда использовать последний, первый или непустой список?

Вот как должна вести себя эталонная функция:

sample
    (MkReactive "a"
        (MkEvent
            (MkFuture 2
                (MkReactive "b" ...)
            )
        )
    (MkFuture 1 ())
= MkFuture 1 "a"

person michaelmesser    schedule 29.05.2019    source источник
comment
Как ваши Reactive & Future соотносятся с Event & Behavior, как их определяет Конал?   -  person bergey    schedule 29.05.2019
comment
@bergey Я использую определения Conal для Reactive, Event и Future.   -  person michaelmesser    schedule 29.05.2019
comment
Вопреки закрытому голосованию, этот вопрос в значительной степени не основан на мнении. В любом случае, для большей ясности я предлагаю сделать ссылку на статью Конала, которую вы используете. (Похоже на Push-pull функциональное реактивное программирование , но я только предполагаю)   -  person duplode    schedule 30.05.2019
comment
@duplode: Спасибо, что указали, что этот вопрос не является вопросом мнения, поскольку есть точная спецификация.   -  person Conal    schedule 04.06.2019


Ответы (1)


В документе Push-pull функционального реактивного программирования (если дубликат правильный), комбинатор фундаментальной выборки switcher описывается как:

Семантика b₀ `switcher` e выбирает и отбирает либо b₀, либо последнее поведение из e до заданного шага расчета t< /эм>

sample должен вести себя так же, чтобы быть совместимым с комбинаторами в этой статье. Поскольку Reactive — это Event с начальным значением, а Future — это пара значений времени, sample r (MkFuture t ()) должна возвращать MkFuture t v, где v — последнее значение в r строго перед t, или начальное значение r, если такого нет. ценность. Нет проблем с несколькими значениями одновременно: любые значения во время t игнорируются, поскольку они не строго предшествуют t, а для значений до t "брать последнее" однозначно.

person user11228628    schedule 31.05.2019
comment
Знаете ли вы причину этого выбора (переключение с помощью ‹, а не ‹=)? - person michaelmesser; 01.06.2019
comment
@ 2426021684 Выбор <, а не <= имеет решающее значение для самореактивного поведения и систем взаимно реактивного поведения, чтобы иметь значения, отличные от основания (отсутствие информации / непрекращение), когда выборка выполняется точно в момент возникновения события. - person Conal; 04.06.2019
comment
@Conal, как можно построить самореактивное реактивное поведение или поведение? - person michaelmesser; 04.06.2019
comment
@ 2426021684 С предикатным событием, т. е. срабатывающим всякий раз, когда изменяющееся во времени логическое значение становится истинным. Таким образом, поведение может реагировать на условие, связанное с ним (прямо или косвенно), в результате чего условие становится ложным. - person Conal; 13.06.2019
comment
Такая же ситуация возникает в чисто непрерывной постановке (без событий) в виде обыкновенных дифференциальных уравнений (ОДУ). - person Conal; 13.06.2019