【发布时间】:2015-02-09 23:51:01
【问题描述】:
这是Shapeless的LabelledProductTypeClassCompanion中deriveHCons的签名:
implicit def deriveHCons[HK <: Symbol, HV, TKV <: HList]
(implicit
ch: Lazy[C[HV]],
key: Witness.Aux[HK],
ct: Lazy[Wrap[TKV] { type V <: HList }]
): Wrap.Aux[FieldType[HK, HV] :: TKV, HV :: ct.value.V] = ...
当Symbol 是最终类时,我们声明一个类型参数HK 必须从Symbol 派生,这对我来说似乎很奇怪。除了Symbol,还有什么可以替代类型参数HK?如果HK总是Symbol,那么这个签名如果去掉HK,直接在类型签名中替换Symbol,就不会那么霸道了吗?
【问题讨论】:
-
嗯...你知道
Shapeless的目的是什么...基于类型的泛型编程实现了Scala通常无法实现的事情。--github.com/milessabin/shapeless/wiki/… -
@SarveshKumarSingh 感谢指点!仍然不确定我是否完全了解这一切是如何运作的,但我有一个更好的理解起点。
标签: scala generics subclassing generic-programming shapeless