【发布时间】:2015-04-02 08:22:26
【问题描述】:
我一直在阅读 Functional Reactive Programming,虽然我没有在任何语言中广泛使用过 monad,但我还是忍不住在 FRP 设计中随处可见。
This question's answers 对什么是函数式响应式编程 有一些精彩的描述,我不会在这里尝试复制。基本上,FRP 会在随时间变化的值之间创建关系。
所以这不能用一元表示吗?将需要随时间修改的值的代码封装在一个 monad 中,将其命名为 Signal,然后像这样使用这些信号(为简单起见,使用 Haskell do-notation)。
do
mx <- mouseX
my <- mouseY
wave <- currentTime >>= liftM sin
-- do some stuff with these values
或者说 FRP 有比我理解的更多的东西吗?是否存在阻止使用 monad 使用这种简单表示的范例?或者这是对 FRP 工作原理的有效(如果可能是简化)理解?
【问题讨论】:
-
箭头是与 FRP 相关的更抽象的概念,你应该先看看它,然后你会发现它比单子方法更不受欢迎 haskell.org/arrows wiki.haskell.org/Arrows-based_Functional_Reactive_Programming 还有“箭头、机器人和功能响应式编程”haskell.cs.yale.edu/?post_type=publication&p=175
-
@Sigrlami 我承认我还没有花时间理解箭头,但感谢您的链接。我会调查这些。
-
在 javascript 中,frp 的一个非常简单的定义不是您将所有数据都视为流吗?肯定有一个流 monad,所以 frp 不只是用一个特定的(非常强大的)monad 编程吗?
标签: javascript haskell functional-programming reactive-programming monads