Ale*_*ing 12 javascript monads haskell functional-programming reactive-programming
我一直在阅读功能反应式编程,虽然我没有在任何语言中广泛使用monad,但我不禁在FRP设计中到处看到它们.
这个问题的答案有什么反应性官能编程一些精彩的描述是,我不会试图在这里复制.基本上,FRP创建了随时间变化的值之间的关系.
所以不能单独表示吗?封装需要在monad中随时间修改的值的代码,调用它Signal,然后使用这些信号(为简单起见,使用Haskell do-notation).
do
mx <- mouseX
my <- mouseY
wave <- currentTime >>= liftM sin
-- do some stuff with these values
Run Code Online (Sandbox Code Playgroud)
或者FRP还有比我理解的更多吗?是否存在使用monad阻止使用这种简单表示的范例?或者这是对FRP如何运作的有效(如果可能是简化的)理解?
pha*_*dej 11
行为可以给予monad操作.毕竟Behavior a是语义上的Time -> a,这是Reader Time.
此外,语义上的事件[(Time, a)]至少可以给出Applicative类似于ZipList结构的实例.
然而,即使这些在理论上也是可能和优雅的,但在实践中它们很难实现.您可以通过Evan Czaplicki查看"控制时间和空间:了解FRP的许多配方"以获取更多信息.
例如,sodium有一种 monadic绑定Behaviors:
switch :: Behavior (Behavior a) -> Reactive (Behavior a)
Run Code Online (Sandbox Code Playgroud)
但我们不是在纯粹的类别中工作,而是在Kleisli类别的Reactivemonad中工作.因此我们可以做得更多.
一个练习,突出的困难,是试图实现ArrowApply的Automaton.SO提供了扰流板
| 归档时间: |
|
| 查看次数: |
976 次 |
| 最近记录: |