一个事件同时多次发生
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
其中 v
是 r
中严格在 t
之前的最后一个值,如果没有这样的值,则为 r
的初始值。同时存在多个值没有问题:时间 t
的任何值都将被忽略,因为它们不严格在 t
之前,并且 t
、[=30= 之前的值] 是明确的。
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
其中 v
是 r
中严格在 t
之前的最后一个值,如果没有这样的值,则为 r
的初始值。同时存在多个值没有问题:时间 t
的任何值都将被忽略,因为它们不严格在 t
之前,并且 t
、[=30= 之前的值] 是明确的。