阿格达。参数 before/after 冒号

Agda. Parameters before/after 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

冒号前后传递参数的根本区别是什么?老实说,我不知道为什么会有人想在冒号之前传递参数,以及它能带来什么好处。也许,这样的数据类型定义使得冒号前的参数在构造函数中可见。

I have no idea why would anyone want to pass parameters before colon and what advantages it can give.

在数据类型声明中,在冒号之前传递的参数在范围内 数据类型定义的主体。

我认为这是一个很好的功能请求。我们可以有例如

typeOf {A : Set} : A -> Set
typeOf a = A -- A is in scope because `{A : Set}` was before the colon

所以随时打开一个新问题建议更改:https://github.com/agda/agda/issues