Module 打开应用于参数的顶级模块
我想把顶级Agda模块和使用它的本地匿名模块的定义放在同一个文件中。但是,顶级模块有参数,我想在第二个模块中实例化它 所以基本上我想这样做:Module 打开应用于参数的顶级模块,module,agda,Module,Agda,我想把顶级Agda模块和使用它的本地匿名模块的定义放在同一个文件中。但是,顶级模块有参数,我想在第二个模块中实例化它 所以基本上我想这样做: module MyModule (A : Set) where foo : A -> A foo x = x module _ where open import Data.Bool open MyModule Bool bar = foo true 但是,openmymodulebool行失败,显示“模块MyModule未参
module MyModule (A : Set) where
foo : A -> A
foo x = x
module _ where
open import Data.Bool
open MyModule Bool
bar = foo true
但是,openmymodulebool
行失败,显示“模块MyModule
未参数化,但正在应用于参数”
有没有办法做到这一点而不必:
- 将第二个模块放入单独的文件中
- 缩进
的内容,例如MyModule
module _ where module MyModule (A : Set) where foo : A -> A foo x = x module _ where open import Data.Bool open MyModule Bool bar = foo true
?您所要求的确切内容目前在Agda中不可能实现。我能想到的最接近的事情是:
module MyModule where
module Main (A : Set) where
foo : A -> A
foo x = x
private
module _ where
open import Data.Bool
open Main Bool
bar = foo true
open Main public
这将以通用形式公开主模块的内容,同时对其他模块隐藏私有定义bar
。但是,当您导入模块并想要实例化参数时,您不能直接写入openimportmymodulenat
,而是必须写入
import MyModule using (module Main)
open MyModule.Main Nat
(对于导入通用版本,openimportmymodule
可以正常工作)