Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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 如何反应';s Monad实例处理同时发生的事件?_Haskell_Frp - Fatal编程技术网

Haskell 如何反应';s Monad实例处理同时发生的事件?

Haskell 如何反应';s Monad实例处理同时发生的事件?,haskell,frp,Haskell,Frp,在Conal Elliot的著作中,第7.1.3节给出了一个Monad实例。如果连接的内部和外部反应同时触发,会发生什么情况 never::事件a MkFuture::Time->a->Future a pure::a->未来a--时间零点 MkReactive::a->事件a->Reactive a MkEvent::Future(被动a)->事件a 加入(MkReactive(MkReactive“foo”never)(MkEvent(pure(MkReactive“bar”never)))

在Conal Elliot的著作中,第7.1.3节给出了一个
Monad
实例。如果
连接的内部和外部反应同时触发,会发生什么情况

never::事件a
MkFuture::Time->a->Future a
pure::a->未来a--时间零点
MkReactive::a->事件a->Reactive a
MkEvent::Future(被动a)->事件a
加入(MkReactive(MkReactive“foo”never)(MkEvent(pure(MkReactive“bar”never)))
是否应忽略“foo”
或将其包含在联接结果中?

以下是第7.1.3节中的联接定义(稍作解释):

-- urr is the outer Reactive; ur is the inner one.
joinR :: Reactive (Reactive a) -> Reactive a
joinR ((a `Stepper` Ev ur) `Stepper` Ev urr) = a `Stepper` Ev u
    where
    u = ((`switcher` Ev urr) <$> ur) <> (join <$> urr)
——urr是外部反应;ur是内部反应。
joinR::反应性(反应性a)->反应性a
joinR((a`Stepper`Ev-ur)`Stepper`Ev-urr)=a`Stepper`Ev-u
哪里
u=((`switcher`Ev urr)ur)(加入urr)

u
定义中使用的
Monoid
实例是第4.5节中定义的
Future
s的实例,在同时触发的情况下,它会选择左边的实例。因此,如果在
join
中同时触发,则不会放弃内部触发。对于您问题中的具体示例,在时间零点采样时仍应发出
“foo”
(我相信monad法则
join.fmap return=id
,如果不是这样的话,就会被违反)

这个问题没有意义--
join
基本上是等待第一个
事件a
到达。因为
从未
(大概)永远不会到达,
join
永远等待,结果是
|
(底部)。@BobDalgleish
(MkEvent(纯(MkReactive“bar”never))
在时间零点激发