【发布时间】:2019-05-08 02:18:23
【问题描述】:
我正在阅读包async 的文档,并试图找到类似于JavaScript 的Promise 的东西,我发现Concurrently,这是实现Functor、Applicative(Promise.全部),Alternative(Promise.race)。但它没有实现Monad (Promise.then),我想知道为什么。
我想这可能是因为(>>=) 是一个顺序操作,与名称Concurrently 冲突,但这是唯一的原因吗?这里还有更重要的原因吗?
【问题讨论】:
-
是的,这正是原因:monad 的全部意义在于它们对 操作顺序 进行编码,而
Concurrently表示并行性,这本质上是无序的。但Concurrently实际上并不等同于 JS 承诺。 Promise 不会给你并行性,只有异步性。也许如果您描述了您的最终目标是什么,这里的人可以帮助您找到正确的解决方案。 -
相关 GitHub 问题:github.com/simonmar/async/pull/26
标签: haskell concurrency promise monads