zig*_*tar 11 haskell functional-programming reactive-programming system.reactive rx-java
功能反应编程是一种以纯函数方式指定副作用程序的方法.
最近我一直在使用rxscala,它是ReactiveX的Java/Scala端口.它基于Observables 的概念,可以被视为某种类型的值流.
对于这个问题,我想排除处理时间连续变化(信号)的FRP方法.
可以使用大量不同的函数组合这些Observable来创建新的可观察对象.这些类似于可应用于集合的函数.而这些都已经相当很好理解,因为我们知道Foldable,Traversable,Applicative,Monads等.
事实上,可观察物是可折叠的,可穿越的单子,就像普通的收藏品一样.但是这些特征可以通过多种方式实现为可观察对象,因为可观察对象比普通集合拥有更多的信息(每个元素的定时信息).结果还必须配备定时信息.
例如,monadic join(flatMap在Scala中)可以以至少两种不同的,合理的方式实现:
由switch嵌套可观测量,这导致截断当前活动的可观察到的,一旦下一个开始发射,或荷兰国际集团之间
RxJava Switch Visualization http://reactivex.io/documentation/operators/images/switch.c.png
通过merge嵌套的observable而不丢弃或延迟任何事件.
RxJava合并可视化http://reactivex.io/documentation/operators/images/mergeDelayError.C.png
......还有更多(见评论)
我对所提供的组合函数库非常满意,但我一直遇到无法实现我想要的情况,我不得不回到某种并发编程.
现在我想知道使用现有的组合器构建所需的行为是否太愚蠢了.或者是rxscala中可用的组合函数不足以创建所有可以想象的行为?
我要求证明一些基本的组合函数B足以从一些输入可观察量创建"每个可想象的可观察的".
可能最困难的部分可能是"每个可想象的可观察"的定义.也许Haskell社区已经产生了这样的东西?