Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 我是否可以基于反应性事件中的行为更改构建事件?_Haskell_Reactive Programming_Frp_Reactive Banana - Fatal编程技术网

Haskell 我是否可以基于反应性事件中的行为更改构建事件?

Haskell 我是否可以基于反应性事件中的行为更改构建事件?,haskell,reactive-programming,frp,reactive-banana,Haskell,Reactive Programming,Frp,Reactive Banana,这里的目标是构建一个事件,在观察到某个行为发生变化时触发该事件 让它更具体一点,假设我有: abFoo::行为a,我喜欢将其视为一种随时间变化的状态 一个函数diffA::a->a->Maybe b,用于判断bFoo值的某些部分是否已更改(再加上一点指示已更改内容的信息,或者为我留出一些避免布尔盲的空间) 现在我想构建一个事件eChanged::Event b,当且仅当我们有一个刚从diffA fooBefore fooAfter出来时触发它 问题来了:框架似乎只允许您在时刻查看一个行为值。

这里的目标是构建一个事件,在观察到某个行为发生变化时触发该事件

让它更具体一点,假设我有:

  • a
    bFoo::行为a
    ,我喜欢将其视为一种随时间变化的状态
  • 一个函数
    diffA::a->a->Maybe b
    ,用于判断
    bFoo
    值的某些部分是否已更改(再加上一点指示已更改内容的信息,或者为我留出一些避免布尔盲的空间)
现在我想构建一个事件
eChanged::Event b
,当且仅当我们有一个
刚从
diffA fooBefore fooAfter
出来时触发它

问题来了:框架似乎只允许您在
时刻查看一个行为值。因此,我无法访问两个值来相互比较。我一直在看,但仍然不知道这是否可能

如果这些零碎的东西有用或能激发出新的想法,那就少一些吧:

基于事件而不是基于行为? 我能想到的第一件事就是让自己了解更多细节:
bFoo
是从事件
eUpdate
累积的,但
eUpdate
不一定更新任何内容。因此,是的,如果我们愿意,我们确实可以访问
eFoo::Event a
,但我不想使用它,因为我认为它是
bFoo
的一个实现细节

失败的尝试 我当前的尝试如下所示:

networkDesc::momentio()
networkDesc=do
...

foo您需要保留一个
事件。这不是一个实现细节;它是网络的基本驱动力。这个
事件可以是底层事件,或者它可以携带不同的值,等等,或者它甚至可以只是一个
()
勾号,但我认为你拥有它是非常重要的<代码>反射
将这类东西很好地组合为
动态
增量
;您可能需要手动执行