我已经阅读过该文档。它说:
严格的积极性条件排除了声明,例如
data Bad : Set where bad : (Bad → Bad) → Bad -- A B C -- A is in a negative position, B and C are OK
因为构造函数的参数类型中出现Bad的否定。 (请注意,在Haskell和ML等标准函数语言中允许使用Bad的相应数据类型声明。)
但它没有说是否有另一种方法将函数存储在其他东西中(如数据类型或记录类型)。
我也尝试了这个,但也没有编译:
bin-op : ∀ {ℓ} (A : Set ℓ) → Set ℓ
bin-op A = A → A → A
record Storer {ℓ} (A : Set ℓ) : Set where
field
operator : bin-op A
那么如何在数据类型/记录类型/我不知道的其他内容中存储函数?
答案 0 :(得分:1)
问题在于
record Storer {ℓ} (A : Set ℓ) : Set where
一部分。您在此处声明Storer
属于Set
Universe,但Storer
包含bin-op A
Universe中的Set ℓ
,并且记录不能包含Storer
比它的领域小。因此,修复方法是将Set ℓ
定义为record Storer {ℓ} (A : Set ℓ) : Set ℓ where
:
_repr_png_
严格的积极性与问题完全无关。
Agda中的Universe多态性在旧wiki中描述。