gpt4 book ai didi

haskell - FRP 是否有一组 "complete"函数/运算符?

转载 作者:行者123 更新时间:2023-12-04 02:24:47 27 4
gpt4 key购买 nike

函数响应式编程是一种以纯函数方式指定副作用程序的方法。
最近我一直在使用 rxscala,它是 ReactiveX 的 Java/Scala 端口端口。它基于 Observable 的概念。 s 可以被视为某种类型的值流。
对于这个问题,我想排除处理时间连续变化(信号)的 FRP 方法。
从旧的 Observable 构建新的 Observable
这些 Observable 可以使用大量不同的函数组合起来,以创建新的 observable。这些类似于可应用于集合的函数。正如我们所知,这些已经很清楚了Foldable , Traversable , Applicative , Monads之类的。
事实上,observables 是可折叠的、可遍历的 monad,就像普通的集合一样。但是对于 observable,这些特征可以通过多种方式实现,因为 observable 比普通集合包含更多的信息(每个元素的时间信息)。结果还必须配备时间信息。
两个 Monad 实现
例如一元 join (flatMap 在 Scala 中)可以至少以两种不同的、合理的方式实现:

  • 作者 switch在嵌套的可观察对象之间进行 ing,这会导致在下一个开始发射时截断当前事件的可观察对象,或者
    RxJava Switch Visualization http://reactivex.io/documentation/operators/images/switch.c.png
  • 通过 merge在不丢弃或延迟任何事件的情况下嵌套可观察对象。
    RxJava Merge Visualization http://reactivex.io/documentation/operators/images/mergeDelayError.C.png
  • ......还有更多(见评论)

  • 限制
    我对所提供的组合函数轨道感到非常满意,但是我一直遇到无法实现我想要的东西的情况,我不得不退回到某种并发编程。
    缺少组合器或大脑?
    现在我想知道我是否太愚蠢而无法使用现有的组合器来构建所需的行为。还是 rxscala 中可用的组合函数不足以创建每个可以想象的行为?
    问题
    我要求证明一些基本的组合函数集 B足以从一些输入的 observable 中创建“每一个可以想象的 observable”。
    可能最难的部分可能是“每一个可以想象的可观察的”的定义。
    也许 Haskell 社区已经产生了这样的东西?

    最佳答案

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

    关于haskell - FRP 是否有一组 "complete"函数/运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30852250/

    27 4 0