一个类型的名称 - 为什么?

时间:2017-05-19 08:12:18

标签: idris

任何人都可以解释一下:

singleton : (t : Type) -> t -> HList [t]

为什么" t"用在这里? t是否引用Type类型的实例

但为什么不这样做呢:

singleton : Type -> Type -> HList [Type]

1 个答案:

答案 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构造函数无效。