RACStream代表monad是什么意思?

jac*_*ack 5 functional-programming ios reactive-cocoa

来自doc RACStream代表一个"Monad"?有人可以解释这在RACStream的上下文中具体意味着什么.我查看了维基上的功能含义,但我很难看到它如何使Reactive-Cocoa受益以及为什么选择这种模式?

Dav*_*Lee 7

在Objective-C的上下文中,RACStreammonad 的事实基本上意味着它遵循一种模式.在这种情况下,RACStream有一个-bind:方法,这是一个更常用的更"原始"的版本-flattenMap:,这些方法基本上是RACStream一个monad.

(有关其使用的更多信息,请查看文档-flattenMap:.)

给定一个B取值的块并返回一个RACStream(即将值映射到流的块),并给定一个流A,调用[A flattenMap:B]将产生一个"聚合"流,其中包含块返回的集合流集中的所有值B(为每个值调用A).(编辑:这个狭隘的解释没有描述结果流的值的时间,也没有描述错误传播.如果你对这些有疑问,我很乐意回答它们.)

可以在ReactiveCocoa的Basic Operators文档中找到几个示例.

至于好处,我认为流是monad的事实大多只对那些有monad经验的人有益.另一方面,文档中几乎没有提到monad,更重要的是,ReactiveCocoa根本不需要monad知识,所以不熟悉monad也没有缺点.