我正在寻找一种用于异步操作的数据类型。
我发现 scalaz.ContT[Trampoline, Unit, ?]
支持 scalaz.concurrent.Future
中的所有功能,此外还有 BindRec
.
尽管如此,scalaz.concurrent.Future
还有更多实用程序。比scalaz.ContT[Trampoline, Unit, ?]
,例如Applicative 实例并行运行 Futures。
我认为这些实用程序可以用于 ContT[Trampoline, Unit, ?]
以及。
作者为什么要新建Future
基于 scalaz-concurrent
库,而不是重用 ContT
?
最佳答案
冒着开玩笑的风险,一个关键的好处是 Future
是一个很多人都会认识和理解的命名概念,例如it has its own wikipedia page .
我不认识 ContT
你说的类型是等价的。我试图在 scalaz 文档中找到它,但它是 listed there with no explanation .我在哪里可以阅读更多关于这个的信息,你怎么知道它等同于一个 future ?
你说“一个 Applicative 实例并行运行 Futures”;会多个 ContT
操作不能并行运行?这是 Futures
的一个关键特性,并且可能会回答您的问题。
更新:
我现在看到 ContT
是延续传递风格的实现,即 scalaz.ContT[Trampoline, Unit, ?]
是延续传递函数的一个特例,它可能与 Future
同构,如果某些外部假设成立。
我认为您的问题的答案与许多其他特殊情况被突出的原因相同,因为它们可能被认为是更一般结构的一种情况:
Future
s 是并行执行的,而我们通常不知道关于继续传递函数的内容。 (当然,可以按顺序执行 Futures,就像在一些测试框架中所做的那样,但这不会被视为 Future 的常规实现)关于scala - scalaz.concurrent.Future 与 scalaz.ContT[Trampoline, Unit, 相比有什么好处?],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43143171/