changes
函数的类型为Frameworks t => Behavior t a -> Moment t (Event t (Future a))
。 Future
是抽象的,只有一个函数使用它(reactimate'
)。
但是,我可以轻松编写以下功能:
changes' :: Frameworks t => Behavior t a -> Moment t (Event t a)
changes' b = fmap (fmap const b <@>) (changes b)
获得正常(非Future
)事件。
该功能有问题吗?如果没有,为什么原始的changes
函数具有更严格的类型?
答案 0 :(得分:4)
函数changes
返回的值与您描述的函数changes'
不同。关键点如下:
考虑由stepper
(或accumB
)定义的行为,该行为恰好在 t0 时发生变化。行为在这个时刻有什么价值?答案是,行为在严格大于的所有时间都采用新值, t&gt; t0 ,并且它在 t0 时仍然具有旧值。换句话说,changes'
函数返回一个事件,其值是更改时行为的旧值。相反,changes
函数返回新的(“future”)值。由于与recursion有关的各种原因,新值包含在Future
类型中,因此在reactimate'
阶段之前无法访问它们。
编辑:托比亚斯画了一张照片说明: