我一直在寻找异步操作的数据类型。
我发现scalaz.ContT[Trampoline, Unit, ?]
支持scalaz.concurrent.Future
中的所有功能,以及BindRec
。
但是,scalaz.concurrent.Future
的实用程序比scalaz.ContT[Trampoline, Unit, ?]
更多,例如一个Applicative实例并行运行Futures。
我认为这些实用程序也可以用于ContT[Trampoline, Unit, ?]
。
为什么作者创建了一个新的基于Future
的{{1}}库,而不是重用scalaz-concurrent
?
答案 0 :(得分:2)
冒着滑稽的风险,一个关键的好处是Future
是一个很多人会认识和理解的命名概念,例如it has its own wikipedia page。
我不认识你所说的ContT
类型是等价的。我试图在scalaz文档中找到它,但它是listed there with no explanation。我在哪里可以阅读更多相关内容,您如何知道它与未来相当?
你说“一个应用实例并行运行期货”;多个ContT
操作不能并行运行?这是Futures
的一个关键功能,可能是您的问题的答案。
我现在看到ContT
是一个继续传递样式的实现,scalaz.ContT[Trampoline, Unit, ?]
是一个连续传递函数的特例,可能与Future
同构,如果是某些外部的假设持有。
我认为你的问题的答案与许多其他特殊情况突然出现的原因相同,因为它们可能被认为是更一般结构的一个案例:
Future
并行执行,而我们不知道关于继续传递函数的一般情况。 (当然,有可能按顺序执行Futures,就像在某些测试框架中那样,但不会被视为Future的传统实现)