一个事件同时发生多次

时间:2019-05-29 19:09:05

标签: haskell frp

Conal Elliott的论文将Event定义为

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 个答案:

答案 0 :(得分:1)

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

  

bem`switcher` 的语义选择并采样b₀   或给定采样时间 t

之前 e 的最后行为

sample的行为应与该论文中的组合器兼容。由于Reactive是具有初始值的Event,而Future是时间值对,因此sample r (MkFuture t ())应该返回MkFuture t v,其中{{1 }}是v中严格从r开始的最后一个值,或者t的初始值(如果没有这样的值)。同时存在多个值没有问题:时间r上的任何值都将被忽略,因为它们并非严格地位于t之前,而在t之前的值中,“取最后一个一个”是明确的。