1

这是Natin package的定义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用?在我看来,一旦删除,该定义同样适用。

4

1 回答 1

4

它们用于Nat从文字隐式转换的目标类型在哪里Int......例如,在索引方法的定义中,请参见此处IntHList

def at(n : Nat)(implicit at : At[L, n.N]) : at.Out = ...

这里的目的是使用文字Int参数调用该方法,

(23 :: "foo" :: true :: HNil).at(1)

该参数由一个隐式宏转换为 a Nat,该宏能够检查编译时参数树并构造相应的Nat值。然后我们可以引用的类型成员N并将n其用作类型类的索引,该At类型类从HList.

于 2015-10-22T13:34:44.767 回答