这是Nat
包中shapeless
的定义:
trait Nat {
type N <: Nat
}
case class Succ[P <: Nat]() extends Nat {
type N = Succ[P]
}
class _0 extends Nat with Serializable {
type N = _0
}
type
声明是什么?
一旦删除,在我看来,该定义同样有效。
答案 0 :(得分:4)
如果Nat
是来自文字Int
的隐式转化的目标类型,则会使用它们...例如,请参阅here {{1}的定义} Int
的索引方法,
HList
这里的意图是使用文字def at(n : Nat)(implicit at : At[L, n.N]) : at.Out = ...
参数
Int
通过隐式宏将参数转换为(23 :: "foo" :: true :: HNil).at(1)
,该宏能够检查编译时参数树并构造相应的Nat
值。然后,我们可以引用Nat
的类型成员N
,并将其用作n
类型类的索引,该类从At
中提取所需的元素。