导入的数据类型与本地定义的数据类型冲突,即使重命名也是如此

时间:2013-04-23 14:14:43

标签: module agda

使用以下Agda代码,BA₂的定义出错:

module Whatever where

module A₁ where
  data B : Set where

module A₂ where
  open A₁ renaming (B to B₁)
  data B : Set where

错误消息是:

Duplicate definition of module B. Previous definition of datatype
module B at /home/cactus/prog/agda/modules.agda:4,8-9
when scope checking the declaration
  data B where

但是我在导入时将B重命名为B₁,为什么它仍会发生冲突?它有办法吗?

2 个答案:

答案 0 :(得分:3)

问题是数据类型定义了模块和名称。您也需要重命名模块。这有效:

module Cactus where

module A₁ where
  data B : Set where

module A₂ where
  open A₁ renaming (B to B₁; module B to B₁)
  data B : Set where

这允许您以模块方式引用构造函数,因此如果Level.suc之间存在冲突,您只需编写ℕ.suc并拥有它无需重命名诡计工作。

答案 1 :(得分:1)

对我来说这似乎是一个Agda错误。您可以在http://code.google.com/p/agda/issues/list中报告错误。