Haskell程序是否可以类似于传递消息的对象?

Geo*_*rge 5 haskell smalltalk object-oriented-analysis

Haskell是一种纯功能性语言,与传统的面向对象语言不同。但是,请考虑以下Alan Kay对OOP的“真实”含义的引用:

对我而言,OOP意味着仅消息传递,本地保留和保护以及状态过程的隐藏以及所有事物的极端后期绑定。可以在Smalltalk和LISP中完成。可能还有其他系统可以做到这一点,但我不知道它们。-艾伦·凯

后来:

我想到的对象就像是生物细胞和/或网络上的个人计算机,只能与消息进行通信(因此消息传递从一开始就出现了,花了一段时间才能看到如何以编程语言足够有效地进行消息传递,有用)。

我很好奇Haskell可以在多大程度上实现这种编程风格。尤其是,是否可以将Haskell程序构造为一系列(类似)封装对象的序列,这些对象彼此之间来回传递消息

注意:我正在寻找特定于Haskell的示例,而不是一般的功能语言(冲突时)。

dan*_*iaz 3

\n

仅消息传递、本地保留和保护以及隐藏状态进程

\n\n

就像网络上的生物细胞和/或个体计算机一样,\n 只能通过消息进行通信

\n
\n\n

我相信某些 Haskell 编程模式在某种程度上确实类似于 Kay 的描述。

\n\n

在像conduitpipes或者streaming这样的流库中,通常将计算构建为由不同阶段组成的管道。管道的每个部分都完全独立于其他部分,并且可以维护自己的私有状态(您也可以在管道中拥有“共享”状态)。

\n\n

拓扑往往是线性和单向的。也就是说,像导管的\xe2 ZipSink\x80\x94这样的抽象和foldl包\xe2\x80\x94中sApplicative的实例可以让你构建分支的“树状”拓扑。管道可以是双向的尽管我还没有看到很多使用它的例子。Fold

\n\n

然后是箭头函数反应式编程。它可以让您构建自动机箭头的“电路”,甚至可以包括循环。电路的每个部分都可以保持自己的状态。正如netwire FRP 库的描述所述:

\n\n
\n

该库提供了接口并实现了对于函数式反应式编程 (FRP) 和本地状态编程 (LSP) 都很有用的线箭头。

\n
\n\n

并来自汽车库的文档:

\n\n
\n

auto 通过提供封装值流转换器或本地有状态函数的类型来工作;通过将程序指定为值流之间的关系(可能是循环的)图,您可以创建一种仅基于数量之间的静态关系来声明系统的方法。

\n\n

auto 不是使用状态单子类型的解决方案(其中所有函数都可以访问严格的全局状态),而是通过指定关系来工作,每个关系独立存在,而不需要任何全局状态。

\n
\n