Types 阿格达。冒号前后的参数
定义数据类型时,我可以在冒号之前“传递”一些参数Types 阿格达。冒号前后的参数,types,syntax,parameters,agda,colon,Types,Syntax,Parameters,Agda,Colon,定义数据类型时,我可以在冒号之前“传递”一些参数 data Image_э_ { A B : Set} : (f : A → B) → B → Set where im : {f : A → B} → (x : A) → Image f э f x 但我似乎无法在函数声明中做到这一点,原因不明 exIm {A B : Set} : {f : A → B}{y : B} → Image f э y → B exIm {y = y} _ = y 冒号前后传递参数的根本区别是什么?老实说
data Image_э_ { A B : Set} : (f : A → B) → B → Set where
im : {f : A → B} → (x : A) → Image f э f x
但我似乎无法在函数声明中做到这一点,原因不明
exIm {A B : Set} : {f : A → B}{y : B} → Image f э y → B
exIm {y = y} _ = y
冒号前后传递参数的根本区别是什么?老实说,我不知道为什么会有人想在冒号之前传递参数,以及它能带来什么好处。也许,这样的数据类型定义会使冒号之前的参数在构造函数中可见
我不知道为什么会有人想在冒号之前传递参数
它能带来什么好处
在数据类型声明中,在冒号之前传递的参数在
数据类型定义的主体
我认为这将是一个很好的功能要求。我们本来可以的
typeOf {A : Set} : A -> Set
typeOf a = A -- A is in scope because `{A : Set}` was before the colon
因此,请随意打开一个新的问题,建议进行更改:我要补充:在
数据
定义的冒号索引左侧,您可以获得一个大的额外功能,即可以避免大小问题。使用左冒号索引,您可以拥有数据图像{ab:Set}:(f:A)→ (B)→ B→ Set
,而使用纯冒号右边索引的等价物必须是数据图像1101;{ab:Set}(f:A→ (B)→ B→ 设置₁
,因为构造函数存储集合A
和B
。@JamesWood Agda现在足够聪明,可以检测参数,即使它们不在冒号的左边。所以在这种情况下,你不会遇到尺寸问题。