Готовить более двух сопутствующих товаров в Shapeless - PullRequest
2 голосов
/ 20 января 2020

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

  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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...