【发布时间】:2014-10-29 12:47:54
【问题描述】:
我正在尝试编写一个值类来为任何实现 Seq[_] 的东西添加功能,并允许它进行返回 Future[_] 的批处理调用(具体来说,我正在使用它进行批处理 REST 调用)。
final class BatchedList[A, C[X] <: Seq[X]](val targetList: C[A]) extends AnyVal {
def batchRequests[B](batchSize: Int)(runner: Seq[A] => Seq[Future[Either[Result, B]]])
(implicit bf: CanBuildFrom[C[A], Either[Result, B], C[Either[Result, B]]]): Future[Either[Result, C[B]]] = {
targetList.grouped(batchSize).foldLeft(Future.successful(bf(targetList))) { (results, set) =>
results flatMap { responses =>
Future.sequence(runner(set)).map(responses ++=)
}
} map {
_.result().sequenceU
}
}
}
但是,我无法编译它。我不断收到编译器错误
value sequenceU is not a member of type parameter C[Either[play.api.mvc.Result,B]]
我已经导入了scalaz._ 和Scalaz._,并且我知道他们已经为我的用例提供了Traverse[_](在这个例子中是List[_])。我很确定这是类型的某种隐含解决问题,但我对如何继续解决它感到困惑。
【问题讨论】: