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

标签 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)

获取正常(非Future)事件。

这个函数有问题吗?如果不是,为什么原始的 changes 函数具有更严格的类型?

最佳答案

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

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

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

关于haskell - 为什么 `changes` 返回 `Event t (Future a)`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26980819/

相关文章:

haskell - `squares xs = [x*x|x<-xs]` 在 Haskell 中意味着什么?

c++ - Haskell 中的面向对象编程

performance - Haskell 程序的奇怪空间行为

scala - 如何表达函数类型?

haskell - 是否可以? : Behavior t [Behavior t a] -> Behavior t [a]

haskell - 功能性 react 香蕉型困惑

haskell - Reactive Banana 1.0.0 - 为什么这个旧代码会被破坏?

Haskell:解析错误可能不正确的缩进或不匹配的括号

haskell - Reactive-Banana 中的动态事件切换

haskell - react 香蕉 react 来检索小部件 textCtrl 值,如 textCtrlGetValue