Prepend more than two coproducts in Shapeless

101 Views Asked by At

I'd like to prepend more than two separate Coproducts into one:

  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 should be Aa :+: Bb :+: Cc :+: Dd :+: Ee :+: Ff :+: CNil

I saw there is Prepend, but I can make it work with only two Coproducts:

  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

There are 0 best solutions below