The changes https://hackage.haskell.org/package/reactive-banana-0.8.0.2/docs/Reactive-Banana-Frameworks.html#v: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
) event.
是不是那个函数有问题?如果不是,为什么原来的changes
函数有更严格的类型吗?
功能changes
返回与函数不同的值changes'
你所描述的。关键点如下:
考虑由以下定义的行为stepper
(or accumB
),有时会发生变化t0。此时该行为有什么价值?答案是,行为在所有时间都呈现新值。严格更大比变化的时间,t > t0,并且它在当时仍然具有其旧值t0。换句话说,changes'
函数返回一个事件,其值是行为更改时的旧值。相比之下,changes
函数返回新的(“未来”)值。由于各种原因,与递归 https://stackoverflow.com/a/7852344/403805,新值被包装在Future
类型,以便在reactimate'
phase.
编辑:托比亚斯画了一张图来说明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)