我一直在阅读函数式反应规划,虽然我没有在任何语言中广泛使用单体,但在玻璃钢的设计中,我禁不住看到它们无处不在。
这个问题的答案对什么是函数式反应编程有一些很棒的描述,我不会在这里重复。基本上,玻璃钢创造的价值之间的关系,随着时间的变化。
难道就不能用一元的方式来表达吗?封装需要随时间而修改的值的代码,命名为Signal,然后像这样使用这些信号(为了简单起见,使用Haskell标记)。
do
mx <- mouseX
my <- mouseY
wave <- currentTime >>= liftM sin
-- do some stuff with these values或者玻璃钢比我理解的还要多?是否有范例阻止使用这样简单的表示方式使用monads?或者,这是对玻璃钢工作原理的有效理解(如果可能是简化的话)?
发布于 2015-02-03 08:19:21
行为可以进行单次操作。毕竟,Behavior a在语义上是Time -> a,即Reader Time。
另外,语义上为[(Time, a)]的事件至少可以给出类似于ZipList结构的Applicative实例。
然而,即使这些理论上是可能的和优雅的,在实践中是很难实现的。您可以查看控制时间和空间:理解玻璃钢的许多配方以获得更多信息。
例如,sodium有Behaviors:
switch :: Behavior (Behavior a) -> Reactive (Behavior a)但是,我们不是在纯范畴工作,而是在Reactive monad的Kleisli范畴中工作。因此,我们可以做得更多。
其中一个突出困难的练习是尝试实现ArrowApply for Automaton。所以提供了扰流器
https://stackoverflow.com/questions/28293831
复制相似问题