Module 打开应用于参数的顶级模块

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未参

我想把顶级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
未参数化,但正在应用于参数”

有没有办法做到这一点而不必:

  • 将第二个模块放入单独的文件中

  • 缩进
    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
可以正常工作)