在阅读和实现 FRP 时,我对 Event 上的 occs
函数的语义感到困惑(在 Conal Elliott 的论文中提到)。处理静态(纯)事件时非常简单,但我不明白它如何处理动态事件(例如按下鼠标按钮等)。例如,如果 occs
返回事件的所有出现,那么据我所知,动态事件的 occs
结果可能是以下内容之一(因为尚未知道所有发生的情况):
- 通话时发生的已知事件
- 自动与事件本身保持同步的数组/列表
当然,这两种方法看起来都有点难看 - 一种破坏了语义纯度,另一种则涉及副作用。
简单地删除 FRP 框架本身之外的 occs
函数(即,将其设为 Event 及其扩展的任何内容的私有(private)函数)是否会更好?只要事件具有返回进一步事件的映射、过滤、合并等功能,我觉得它可能会毫无问题地丢失。或者,我误解了什么?
最佳答案
据我了解Conal's paper中提到的occs
函数不是 API 的一部分。相反,它是编程模型的规范。 Conal 使用它来描述各种组合器的语义,但这不是您可以或应该实现的东西。
关于programming-languages - `occs` 应该可供程序员使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9280347/