任何人都可以解释一下:
singleton : (t : Type) -> t -> HList [t]
为什么" t"用在这里? t
是否引用Type
类型的实例?
但为什么不这样做呢:
singleton : Type -> Type -> HList [Type]
答案 0 :(得分:2)
singleton : (t : Type) -> t -> HList [t]
有两个参数 - 一种类型和一种类型的值,例如
singleton Int 3 : HList [Int]
singleton String "string" : HList [String]
相比之下
singleton : Type -> Type -> HList [Type]
将采用两个Type
参数,例如
singleton Int String
但假设您定义了HList
,则可能定义为:
data HList : List Type -> Type where
Nil : HList []
singleton : (t : Type) -> t -> HList [t]
...
因此需要通过索引值的类型列表进行参数化。由于singleton
不是Type
类型的值,因此Type
构造函数无效。