这个问题最近出现了几次,所以我在这里常见问题.假设我有一些像这样的案例类:
import io.circe._, io.circe.generic.semiauto._
object model {
case class A(a: String)
case class B(a: String, i: Int)
case class C(i: Int, b: Boolean)
implicit val encodeA: Encoder[A] = deriveEncoder
implicit val encodeB: Encoder[B] = deriveEncoder
implicit val encodeC: Encoder[C] = deriveEncoder
implicit val decodeA: Decoder[A] = deriveDecoder
implicit val decodeB: Decoder[B] = deriveDecoder
implicit val decodeC: Decoder[C] = deriveDecoder
}
Run Code Online (Sandbox Code Playgroud)
我想使用circe和Shapeless副产品对一个值进行编码,这些值可以是JSON中的任何一个.
import io.circe.shapes._, io.circe.syntax._
import shapeless._
import model._
type ABC = A :+: B :+: C :+: CNil …Run Code Online (Sandbox Code Playgroud) 不确定正确的术语是否是“分配财产”,但我记得在学校学过这个,所以这里是我想做的一个例子:
鉴于:
type MyHList = (A :+: B :+: C :+: CNil) :: (Foo :+: Bar :+: CNil) :: HNil
Run Code Online (Sandbox Code Playgroud)
Shapeless 中是否有任何内置类型类可以解决这个问题:
type Out = (A, Foo) :+: (A, Bar) :+: (B, Foo) :+: (B, Bar) :+: (C, Foo) :+: (C, Bar) :+: CNil
Run Code Online (Sandbox Code Playgroud)
?
谢谢