【发布时间】:2012-02-16 06:51:00
【问题描述】:
我正在阅读Dependent Types at Work。在参数化类型的介绍中,作者在这个声明中提到了
data List (A : Set) : Set where
[] : List A
_::_ : A → List A → List A
List 的类型是 Set → Set,A 成为两个构造函数的隐含参数,即。
[] : {A : Set} → List A
_::_ : {A : Set} → A → List A → List A
好吧,我试着用不同的方式重写它
data List : Set → Set where
[] : {A : Set} → List A
_::_ : {A : Set} → A → List A → List A
遗憾的是,这不起作用(我试图学习 Agda 两天左右,但从我收集的信息来看,这是因为构造函数是在 Set₀ 上参数化的,所以 List A 必须在 Set₁ 中) .
确实,接受以下内容
data List : Set₀ → Set₁ where
[] : {A : Set₀} → List A
_::_ : {A : Set₀} → A → List A → List A
但是,我不能再使用{A : Set} → ... → List (List A)(这是完全可以理解的)。
所以我的问题是:List (A : Set) : Set 和 List : Set → Set 之间的实际区别是什么?
感谢您的宝贵时间!
【问题讨论】: