Scala 从递归类型语法实例化类型

Scala 从递归类型语法实例化类型,scala,shapeless,recursive-datastructures,circe,Scala,Shapeless,Recursive Datastructures,Circe,给定此递归类型语法: case class Fix[F[_]](out: F[Fix[F]]) type FieldValue = Seq[String] :+: String :+: Int :+: Long :+: CNil type FieldLeaf[F] = FieldValue :+: SubField[F] :+: CNil type SubField[F] = Seq[F] type Field0[F] = (String, FieldLeaf[F]) type Field =

给定此递归类型语法:

case class Fix[F[_]](out: F[Fix[F]])
type FieldValue = Seq[String] :+: String :+: Int :+: Long :+: CNil
type FieldLeaf[F] = FieldValue :+: SubField[F] :+: CNil
type SubField[F] = Seq[F]
type Field0[F] = (String, FieldLeaf[F])
type Field = Fix[Field0]
以及
Seq[Field]

从类型语法实例化具体类是否可行?

即:

我想它可以用于此,就像在json库中一样



另请参见

实例化具体类是什么意思?你的函数中的
T
是什么?@OlivierBlanvillain请参阅更新。来自Shapper gitter频道的回复:你可以通过混合使用ToHList、Typeable和Generic来实现这一点。当然会产生一个选项[Person]。最终递归地将所有内容映射到等价的Circe Json构造,因为Json实际上是递归数据的一种非常好的表示形式,Circe非常支持将Json解码为case类和密封特征。实例化具体类是什么意思?你的函数中的
T
是什么?@OlivierBlanvillain请参阅更新。来自Shapper gitter频道的回复:你可以通过混合使用ToHList、Typeable和Generic来实现这一点。当然会产生一个选项[Person]。最终递归地将所有内容映射到等价的Circe Json构造,因为Json实际上是递归数据的一个很好的表示形式,Circe非常支持将Json解码为case类和密封特征。
def instantiate[T](fields:Seq[Field]):Option[T] = ....
case class Person(id:Long, name:String)
val fields:Seq[Field] = .... //seq of person fields
val person:Option[Person] = instantiate[Person](fields)