【发布时间】:2022-06-11 04:43:08
【问题描述】:
在“使用 Idris 进行类型驱动开发”一书中,作者解释了如何创建可变参数函数。他以adder 函数为例,该函数使用第一个参数n: Nat,然后添加n + 1 个整数参数。为了声明这个函数,本书引入了依赖类型AdderType,以便于写:
adder: (numargs: Nat) -> (acc: Int) -> AdderType numargs
到目前为止一切顺利。但随后提出了AdderType的如下定义:
AdderType : (numargs: Nat) -> Type
AdderType Z = Int
AdderType (S k) = (next: Int) -> AdderType k
此时我迷路了。 AdderType Z = Int 行有意义,但最后一行没有。我会认为表达式(next: Int) -> AdderType k 有亲切的Int -> Type,但不是 亲切的Type。 Idris 是否认为任何依赖类型也是也是一种类型?如果是,这是否也适用于类型构造函数? (也就是说:kind Type -> Type 的值是否也有 kind Type ?)
免责声明:我是类型论的初学者,所以我对“种类”和“依赖类型”等技术术语的使用可能不合适。如果是这种情况,请纠正我。
【问题讨论】: