天道酬勤,学无止境

frp

What's the difference between Behavior and Event in FRP?

问题 我目前正在阅读 WebSharper 的文档。 在关于 FRP 的部分中,它指出: 功能响应式编程 (FRP) 通常为事件流提供 Event 类型,为时变值提供 Behavior 类型,以及对它们有用的组合器。 ... 但是,目前我们决定避免实施 FRP。 相反,我们专注于功能的子集,定义类似于行为的随时间变化的视图值,但不支持实时采样。 事件流留给用户使用回调或第三方库来处理。 这是对 FRP 的极大简化,并且更容易有效地实施。 随着 JavaScirpt 中的弱指针变得可用,这个决定可能会被修改,特别是考虑到 OCaml React 的成功。 在不久的将来,我们打算提供并发 ML 组合器,以更好地支持处理事件流并改进组件的组合。 但是,我不确定此处描述的“事件类型”和“行为类型”之间到底有什么区别。 我在谷歌上搜索了一些文章/教程,但它们似乎也不是很明确。 我不确定在 WebSharper 的实现中没有“事件”会错过什么。 对不起,如果这个问题听起来很基础。 我不熟悉与 FRP 相关的概念。 -- 编辑:我想我在 FRP - 事件流和信号 - 仅使用信号时丢失了什么? 要点是: 事件流允许累积更新,而行为只能取决于观察到的元素的当前值。 如果事件和行为都实现了,它们允许在系统内递归。 回答1 事件和行为之间的区别可以追溯到第一篇关于功能反应动画 (PDF) 的论文

2022-05-15 01:27:10    分类:技术分享    f#   reactive-programming   frp   websharper   websharper.ui.next

Reactive Cocoa limit a signal to only one subscriber at once

问题 我需要在 RAC 中建模。 我有一个 tabBarController 将订阅通知信号。 说推送通知。 还说当前活动的视图控制器也可能想要订阅相同的信号。 但是,如果任何订阅它的视图控制器 tabBarController 不想处理它。 否则它将处理它。 此外,当当前可见视图控制器发生变化时。 它需要将责任委托给 tabController。 目前没有 RAC,我在 tabController 维护了一系列观察者。 如果有任何观察员出席特定类型的通知。 它将委托给 viewController 否则 tabController 将处理它。 使用 RAC 进行建模的更好方法是什么?

2022-05-13 07:49:17    分类:技术分享    ios   swift   reactive-cocoa   frp

Reactive Cocoa limit a signal to only one subscriber at once

I need to model following in RAC. I have a tabBarController which will subscribe to a notification signal. Say push notification. Also say currently active view controller may also be want to subscribe to the same signal. But if any view controller subscribed to it tabBarController doesn't want to handle it. Otherwise it will handle it. Also when current visible view controller changes. It needs to delegate back the responsibility to tabController. Currently without RAC I maintain array of observers at tabController. If any observer present for particular kind of notification. It will delegate

2022-04-30 07:58:09    分类:问答    ios   swift   reactive-cocoa   frp

What's the difference between Behavior and Event in FRP?

I'm currently reading the documentation of WebSharper. In the section about FRP, it states: Functional Reactive Programming (FRP) typically provides an Event type for event streams and a Behavior type for time-varying values, together with useful combinators on those. ... However, for now we decided to avoid implementing FRP. Instead, we focus on a subset of functionality, defining time-varying View values similar to Behaviors, but without support for real-time sampling. Event streams are left for the user to tackle using callbacks or third-party libraries. This is a vast simplification over

2022-04-29 19:25:02    分类:问答    f#   reactive-programming   frp   websharper   websharper.ui.next

RxJs: how to get values emitted before we subscribe?

问题 回答1 observable 只是一个从现在到时间结束之间返回 0 个或多个值的函数。 像任何其他函数一样,它在被调用(订阅)之前不做任何事情。 话虽这么说,你可以通过调用将你的 observable 转换为hot observable: // This makes the observable 'connectable' myObservable.publish(); // And make it start emitting items myObservable.connect(); 或者,如果你从一个数组创建可观察对象,你当然可以只看数组:)

2022-04-29 08:11:11    分类:技术分享    javascript   rxjs   reactive-programming   frp

RxJS5 - How can I cache the last value of a aggregate stream, without using Subjects and whilst excluding those that have completed?

问题 我想要一个 pubsub 系统,它有流的生产者和消费者,通过数据平面层但没有主题。 许多生产者可以多播到相同的流名称(例如,'filters.add'),并且多个消费者可以订阅该流。 生产者注册名称和流以创建“已发布流的流”。 如果一个新的生产者注册了一个特定的流名称,流向消费者的流会动态更新,以便接收到的数据是所有当前活动的已发布流与请求的名称的合并。 一个生产者流完成不应导致聚合流完成,而是在发生这种情况时被排除(更新所有消费者)。 在生产者注册后获取流的消费者应该收到该流的最后一个发出的值(如果迄今为止有一个)。 这是我到目前为止的代码和我希望满足的测试。 我可以满足基本情况但不能缓存,因为: 已完成的流被排除在外,即使它们可能已经发出了最新的值; stream.publish().refCount() .cache(1)从第一个Observable重复条目4 ,而不是从第二个 Observable 重复条目8 ; 即使pluckActiveStreams注释掉了,这也不起作用,我只是无法让它与任何注释掉的方法一起工作...... 我的问题是: 如何实现聚合流的缓存? 注释掉的relevantStreams$的最后几行都没有做到这一点。 我认为我需要从收到的聚合流中删除已完成的流,以便聚合流本身不会(永远)完成。 这是(可能

2022-04-26 12:31:04    分类:技术分享    stream   publish-subscribe   rxjs   frp   subject

RxJS groupBy and combineAll operators seem to omit output

问题 使用 .groupBy 和 .concatAll 的组合对输出进行分组时,不会生成一些预期的输出。 示例代码: var Rx = require('rx'); var source = Rx.Observable.from(['a1', 'a2', 'b1', 'b2', 'a3', 'a4', 'b3', 'b4']) .groupBy(function (item) { return item.substr(0, 1); }) .concatAll(); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); 实际输出: $ node index.js Next: a1 Next: a2 Next: a3 Next: a4 Completed 预期输出: $ node index.js Next: a1 Next: a2 Next: a3 Next: a4 Next: b1 Next: b2 Next: b3 Next: b4 Completed

2022-04-26 04:18:03    分类:技术分享    javascript   rxjs   frp   reactivex

recursive update a "Behaviour" in Sodium yields 'thread blocked ...'

问题 我会根据当前值更新行为(Cell / Val)。 但以下代码会在 MVar 操作异常中引发无限期阻塞的线程。 我预计它会打印三倍的“我的价值:”。 我错过了什么? - 谢谢。 {-# LANGUAGE RecursiveDo #-} module Main where import FRP.Sodium main :: IO () main = do (e, t) <- sync newEvent rec b <- sync $ hold 0 $ snapshot (\_ i -> i + 1) e b sync $ listen (value b) (\i -> putStrLn $ "value of i: " ++ show i) sync $ t "ping" sync $ t "ping" sync $ t "ping" return () GHCi,版本 7.8.3 钠-0.11.0.3 回答1 您从RecursiveDo的递归让位于IO单子中。 Reactive monad 也有一个MonadFix实例。 您可以在Reactive中完全定义b ,然后围绕它使用同步来将整个定义作为事务执行。 main = do (e, t) <- sync newEvent b <- sync $ do rec b <- hold 0 $ snapshot (\_ i -> i

2022-04-20 20:13:09    分类:技术分享    haskell   frp   sodiumfrp

Fighting with FRP

问题 我读过 FRP 并且非常兴奋。 它看起来很棒,因此您可以编写更多高级代码,并且一切都更加可组合,等等。 然后我尝试用几百个 sloc 从纯 js 到 Bacon 重写我自己的小游戏。 而且我发现,我实际上并没有编写高级逻辑代码,而是使用 Bacon.js 及其对原则的坚持。 我遇到了一些主要干扰干净代码的头痛 .take(1) 我应该创造丑陋的结构,而不是获得价值。 循环依赖 有时他们应该是逻辑上的。 但是在 FRP 中实现它是可怕的 活动状态 甚至 bacon.js 的创建者也遇到了麻烦。 作为示例,这里是演示问题的代码和平: 任务是不允许两个玩家呆在同一个地方 用 bacon.js 实现 http://jsbin.com/zopiyarugu/2/edit?js,console function add(a) {return function(b){return a + b}} function nEq(a) {return function(b){return a !== b}} function eq(a) {return function(b){return a === b}} function always(val) {return function(){return val}} function id(a){return a} var Player =

2022-04-20 12:53:29    分类:技术分享    javascript   reactive-programming   frp   bacon.js

RxJS5 - How can I cache the last value of a aggregate stream, without using Subjects and whilst excluding those that have completed?

I want a pubsub system, with producers and consumers of streams, via a dataplane layer but without Subjects. Many producers can multicast to the same stream name (e.g, 'filters.add'), and multiple consumers can subscribe to the stream. Producers register with a name and stream to create a 'stream of published streams'. If a new producer registers with a particular stream name, the streams flowing to the consumers are dynamically updated such that the data received is a merging of all currently active published streams with the name requested. One producer stream completing should not cause the

2022-04-17 10:26:05    分类:问答    stream   publish-subscribe   rxjs   frp   subject