Подготовьте более двух дополнительных продуктов в Shapeless

Я хотел бы добавить более двух отдельных копродуктов в один:

  import shapeless.syntax._
  case class Aa(name: String)
  case class Bb(age: Int)
  case class Cc(ok: Boolean)
  case class Dd(x: Long)
  case class Ee(y: Double)
  case class Ff(z: Option[String])

  type _AB = Aa :+: Bb :+: CNil
  type _CD = Cc :+: Dd :+: CNil
  type _EF = Ee :+: Ff :+: CNil
  type ABCDEF = ???

ABCDEF должен быть Aa :+: Bb :+: Cc :+: Dd :+: Ee :+: Ff :+: CNil

Я видел есть Prepend, но я могу заставить его работать только с двумя копродуктами:

  private val ab = Coproduct[_AB](Aa("test"))
  private val cd = Coproduct[_CD](Cc(true))

  private val abcd_prepended: coproduct.Prepend.Aux[_AB, _CD, Aa :+: Bb :+: _CD] = Prepend[_AB, _CD]
  val abcd_ab: _ABCD = abcd_prepended(Left(ab))
  val abcd_cd: _ABCD = abcd_prepended(Right(cd))

  println(abcd_ab)
  println(abcd_cd)

0 ответов

Другие вопросы по тегам