Несколько событий в одно и то же время - PullRequest
2 голосов
/ 29 мая 2019

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

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"

1 Ответ

3 голосов
/ 31 мая 2019

В статье Функциональное реактивное программирование двухтактного режима (если дуплод верен), основной комбинатор выборки 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 однозначно "взять последнее".

...