Usar sin forma para convertir la tupla de Future a Future of tuple a través de HList

¿Hay una manera fácil de convertir una tupla de tipo (Futuro [A], Futuro [B], Futuro [C], ..., Futuro [N]) a Futuro [(A, B, C, ..., NORTE)]? Esto supone un número indefinido de elementos en la tupla.

Intenté convertir la tupla a HList y probé un truco similar de foldLeft y de comprensión como se hizo en Future.sequence, pero no tuve suerte al tratar con los tipos pasados al redil. Intenté lo mismo con funciones recursivas. Pero este código aún no se compila debido a la falta de HList.head, HList.tail. El código se ve así:

def sequence[L <: HList](in: L)(implicit ihc: IsHCons[L]) = {

  val list = for (i <- in.head; j <- in.tail.head) yield HList(i, j)

  @tailrec
  def sequence2(fList: Future[HList], listF: HList): Future[HList] = {
    if (listF == HNil) fList
    else {
      val nextFList = for (l <- fList; e <- listF.head.asInstanceOf[Future[_]]) yield l :+ e
      sequence2(nextFList, listF.tail)
    }
  }

  sequence2(list, in.tail.tail)
}

Este código debe devolver Future [HList], que luego podemos asignar a tupla con la función tupled. Idealmente, debemos verificar el hecho de que tenemos menos de 3 elementos en la tupla. Pero supongamos que la entrada es una HList de tamaño 3 o mayor para este ejercicio.

Estoy en Shapeless 1.2.4 y todavía no puedo moverme debido a otras dependencias.

¡Gracias por adelantado!

Respuestas a la pregunta(1)

Su respuesta a la pregunta