бесформенный: получить Tupler для HList - PullRequest
0 голосов
/ 20 апреля 2020

Я очень плохо знаком с бесформенным и изо всех сил пытаюсь получить Tupler для моего HList. Вот упрощенный пример:

object Builder {
  import shapeless.ops.hlist.Tupler.hnilTupler
  val empty: Builder[HNil] = new Builder[HNil](HNil)
}

class Builder[L <: HList: Tupler](list: L) {
  def add[T](value: T): Builder[T :: L] = new Builder[T :: L](value :: list)
  def tuple: Tupler[L]#Out = list.tupled
}

Строка def add[T](value: T): Builder[T :: L] = new Builder[T :: L](value :: list) не компилируется, поскольку нет неявного Tupler[T :: L], и я не могу понять, следует ли выводить следующую из предыдущей. Есть мысли?

1 Ответ

2 голосов
/ 20 апреля 2020

shapeless.ops.hlist.Tupler.hnilTupler не предполагается импортировать.

Обычно в Scala, если в методе отсутствует какое-либо неявное значение, вы добавляете соответствующий неявный параметр. Попробуйте

def add[T](value: T)(implicit tupler: Tupler[T :: L]): Builder[T :: L] = new Builder[T :: L](value :: list)
...