Использование бесформенного для преобразования кортежа будущего в будущее кортежа с помощью HList

Есть ли простой способ конвертировать кортеж типа (Future [A], Future [B], Future [C], ..., Future [N]) в Future [(A, B, C, ..., N)]? Это предполагает неопределенное количество элементов в кортеже.

Я попытался преобразовать кортеж в HList и попробовал аналогичную уловку foldLeft и для понимания, как это было сделано в Future.sequence, но мне не повезло в работе с типами, передаваемыми в складку. Пробовал то же самое с рекурсивными функциями. Но этот код по-прежнему не компилируется из-за отсутствия HList.head, HList.tail. Код выглядит следующим образом:

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)
}

Этот код должен возвращать Future [HList], который мы затем можем отобразить в кортеж с помощью функции tupled. В идеале нам нужно проверить, есть ли в кортеже менее 3 элементов. Но давайте предположим, что для этого упражнения вводится HList размером 3 или больше.

Я на Shapeless 1.2.4 и пока не могу двигаться из-за других зависимостей.

Заранее спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос