如何在Agda中将记录/数据类型中的函数存储?

时间:2017-11-16 08:15:03

标签: function agda

我已经阅读过该文档。它说:

  

严格的积极性条件排除了声明,例如

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

那么如何在数据类型/记录类型/我不知道的其他内容中存储函数?

1 个答案:

答案 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中描述。