为什么`changes`返回`Event t(Future a)`

Tob*_*ndt 8 haskell reactive-banana

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)
Run Code Online (Sandbox Code Playgroud)

获得正常(非Future)事件.

这个功能有问题吗?如果没有,为什么原始changes功能有更严格的类型?

Hei*_*mus 4

该函数返回的值与您描述的changes函数不同。changes'关键点如下:

stepper考虑由(或)定义的行为,它恰好在时间t0accumB发生变化。该行为此时此刻有什么价值?答案是,行为在严格大于更改时间t > t0的所有时间中都采用新值,并且在时间t0时它仍然具有旧值。换句话说,该函数返回一个事件,其值是行为更改时的旧值。相反,该函数返回新的(“未来”)值。由于与递归有关的各种原因,新值被包装在类型中,以便在该阶段之前无法访问它们。changes'changesFuturereactimate'

编辑:托比亚斯画了一张图来说明: