如何在Scala中推广Future.sequence

时间:2014-05-22 19:06:30

标签: scala

我正在尝试理解Scala类型系统,并概括了Future.sequence类型为List[Future[T]] => Future[List[T]]的概念。我们可以尝试通过定义类型A[B[C]] => B[A[C]的函数来概括这个概念。

最好的方法是什么?我正在考虑下面的内容(请注意,我使用的名称表明这是一个幺半群,但即使看起来有点类似,它也不是真正的幺半群):

trait Flippable[A[B[C]], B[_], C] {
  def mappend(a1: B[A[C]], a2: B[C]): B[A[C]]
  def mzero: B[A[C]]
}

上面的代码段无法编译,因为类型不一致地限制为使用mappendmzero的api。我如何指定适当的约束来使这个可编译,以便我可以正确地定义像Future.sequence这样的函数?是否存在可以使用的高阶构造/概念(类似于monoid)以避免从头开始定义可翻转特征,正如我上面尝试的那样?

0 个答案:

没有答案