【问题标题】:Is there a "complete" set of functions/operators for FRP?FRP 是否有一套“完整”的功能/运算符?
【发布时间】:2015-06-15 18:19:40
【问题描述】:

函数响应式编程是一种以纯函数方式指定副作用程序的方法。

最近我一直在使用 rxscala,它是 ReactiveX 的 Java/Scala 端口。它基于Observables 的概念,可以被视为某种类型的值流。

对于这个问题,我想排除处理时间连续变化(信号)的 FRP 方法。

从旧的 Observables 构建新的 Observables

这些 Observable 可以使用大量不同的函数组合起来,以创建新的 observable。这些类似于可应用于集合的函数。而这些已经很好理解了,我们知道FoldableTraversableApplicativeMonads 等等。

确实,可观察对象是可折叠、可遍历的单子,就像普通的集合一样。但是对于 observable,这些特征可以通过多种方式实现,因为 observable 比普通集合包含更多的信息(每个元素的时间信息)。并且结果还必须符合时间信息。

两个 Monad 实现

例如,monadic join(Scala 中的flatMap)可以至少以两种不同的、合理的方式实现:

限制

我对所提供的组合函数库感到非常满意,但我经常遇到无法实现我想要的结果的情况,我不得不退回到某种并发编程。

缺少组合器或大脑?

现在我想知道我是否太愚蠢而无法使用现有的组合器来构建所需的行为。还是 rxscala 中可用的组合函数不足以创建所有可以想象的行为?

问题

我要求证明一些基本的组合函数集B 足以从一些输入可观察对象创建“所有可想象的可观察对象”。

可能最困难的部分可能是“每一个可以想象的可观察的”的定义。 也许 Haskell 社区已经产生了类似的东西?

【问题讨论】:

  • 这更多的是理论而不是实际问题。也许CSSE 更适合?
  • 我认为这个问题写得没有多大意义。尽管响应式库试图尽可能通用,但它们通常在设计时考虑到特定类型的域。例如,您有用于 haskell 的 netwire 库,它假设大多数事物是连续值,偶尔需要事件,而其他一些库可能会更加强调事件并提供抽象,允许您将值视为如果它们是连续的。可能只是您的域不适合该库提供的模型。
  • @Cubic 我没有考虑时间连续框架。我会将它们排除在问题之外,因为这可能与离散情况有很大不同。否则我不得不不同意你的假设,即该库不适合我的用例——它非常适合,但只是缺少一些特殊功能(但也许不是)。
  • 如果您喜欢以FoldableApplicativeMonad 等方式思考,您可能会喜欢rxscalaz
  • 顺便说一句,单子连接的第三种可能实现是concatMap...

标签: haskell functional-programming system.reactive reactive-programming rx-java


【解决方案1】:

查看this blog postthis video。在那里,Bart de Smet 提出了一组最小的操作,可以构建所有其他操作员。我想,出于性能原因,人们可能不应该尝试通过基本运算符实现每个运算符,但尝试一些有趣的练习。

【讨论】:

  • 谢谢。我正在寻找这篇文章,但找不到它
  • 我浏览了这篇文章,现在有点失望。显然作者只是在解释单子和一些有用的相关概念。他没有解决 OP 中提到的问题(例如,join 的多个合理定义)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
相关资源
最近更新 更多