一个事件同时多次发生

Multiple Occurrences of an Event at the same Time

Conal Elliott 的论文将事件定义为

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"

在论文Push-pull functional reactive programming中(如果duplode是正确的),基本采样组合器switcher被描述为:

The semantics of b₀ `switcher` e chooses and samples either b₀ or the last behavior from e before a given sample time t

sample 的行为方式应与该论文中的组合器兼容。由于 Reactive 是具有初始值的 Event,而 Future 是 time-value 对,因此 sample r (MkFuture t ()) 应该 return a MkFuture t v 其中 vr 中严格在 t 之前的最后一个值,如果没有这样的值,则为 r 的初始值。同时存在多个值没有问题:时间 t 的任何值都将被忽略,因为它们不严格在 t 之前,并且 t、[=30= 之前的值] 是明确的。