与scalaz.ContT相比,scalaz.concurrent.Future有什么好处[Trampoline,Unit,?]

Yan*_* Bo 8 concurrency continuations scala future scalaz

我一直在寻找异步操作的数据类型.

我发现除此之外还scalaz.ContT[Trampoline, Unit, ?]支持所有功能.scalaz.concurrent.FutureBindRec

虽然,也有更多的实用程序scalaz.concurrent.Futurescalaz.ContT[Trampoline, Unit, ?],比如一个应用型实例运行期货并行.

我认为这些实用程序也可以实现ContT[Trampoline, Unit, ?].

为什么作者创建一个新Futurescalaz-concurrent库而不是重用ContT

Ric*_*ich 2

冒着开玩笑的风险,一个关键的好处是,这Future是一个很多人都会认识和理解的命名概念,例如它有自己的维基百科页面

我不认识ContT你所说的等效类型。我试图在 scalaz 文档中找到它,但它列在那里没有任何解释。我在哪里可以阅读有关此内容的更多信息,以及您如何知道它相当于 Future?

你说“一个 Applicative 实例并行运行 Futures”;多个ContT操作不会并行运行吗?这是一个关键特征Futures,并且可能是您问题的答案。

更新:

我现在看到这ContT是延续传递风格的实现,这scalaz.ContT[Trampoline, Unit, ?]是延续传递函数的一个特例,它可能同构于Future如果某些外部假设成立,它可能同构于 。

我认为你的问题的答案与许多其他特殊情况被重视的原因相同,因为它们可能被认为是更一般结构的一种情况:

  • 更容易讨论,更容易命名
  • 它更有效,因为实现可以利用一般结构中可能不存在的一些特殊情况
  • 更容易推理,例如在这里我们可以确定Futures 是并行执行的,而我们一般不知道连续传递函数。(当然,可以按顺序执行 Future,就像在某些测试框架中所做的那样,但这不会被视为 Future 的常规实现)
  • 这是一个有用的概念,有利于程序员突出它并使其易于理解