scala – 为什么无形的_0 Nat是一个类而不是一个对象?
发布时间:2020-12-16 19:14:17 所属栏目:安全 来源:网络整理
导读:我想了解Shapeless,我遇到了这个: // Base trait for type level natural numbers.trait Nat { type N : Nat}// Encoding of successor.case class Succ[P : Nat]() extends Nat { type N = Succ[P]}// Encoding of zero.class _0 extends Nat { type N = _
|
我想了解Shapeless,我遇到了这个:
// Base trait for type level natural numbers.
trait Nat {
type N <: Nat
}
// Encoding of successor.
case class Succ[P <: Nat]() extends Nat {
type N = Succ[P]
}
// Encoding of zero.
class _0 extends Nat {
type N = _0
}
_0是一个特殊而独特的案例,如列表的Nil. _0没有前任.为什么它不是一个对象/案例对象(单例)? HLists似乎这样做: // `HList` ADT base trait.
sealed trait HList
// Non-empty `HList` element type.
final case class ::[+H,+T <: HList](head : H,tail : T) extends HList {
override def toString = head+" :: "+tail.toString
}
// Empty `HList` element type.
sealed trait HNil extends HList {
def ::[H](h : H) = shapeless.::(h,this)
override def toString = "HNil"
}
// Empty `HList` value.
case object HNil extends HNil
解决方法
(只是猜测,我不知道原因.)
也许是因为类型_0可用(如def fun [N<:Nat] = ???; fun [_ 0],或更简单地定义有关此类型的含义). 如果_0将是单例,则只有类型_0.type可用. 和HNil一样吗? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
