所以问题出在标题上。这里有一些解释:众所周知,我们可以使用HList
它来存储对象及其类型。
SomeCL[Int], SomeCL[String], SomeCL[MyType1] :: ... :: HNil
哪里SomeCL
有课。所以我想制作地图,它可以在里面存储所有类型的信息,比如:
// it is wrong usage of HMap, it is an example of how I want it be
HMap("string1" -> SomeCL[Int], "string2" -> SomeCL[MyType1], ... )
并且不要丢失有关类型的信息。我想注意,对象类型和对象数量 r 未知,因此我们不能对原生 shapeless 使用大量隐含HMap
。可能吗?
已编辑
(我的意思是我们不可能为 shapeless 手动编写所有隐式类型转换HMap
)
附言
如果不可能,我该如何决定这样的问题:例如,我有一些对象HList
,我正在构建图形。每个节点的安全类型非常重要(我们从 中的对象创建节点HList
),我不知道对象的数量。我如何构建图形,而不是丢失有关类型的信息?
已编辑2
S
顺便说一句,如果是 and 的超类型A
,此代码将引发错误C
;我们怎样才能避免这种情况?
class SomeCL[T](val l: T) {
}
class NodeMap[K, V]
implicit val si = new NodeMap[String, SomeCL[A]]
implicit val sd = new NodeMap[String, SomeCL[S]]
implicit val sb = new NodeMap[String, SomeCL[C]]
val hm = HMap[NodeMap]("foo" -> new SomeCL(new A), "bar" -> new SomeCL(new S), "lol" -> new SomeCL(new C))