module - Agda 中匿名模块的用途
问题描述
进入 Agda 标准库的根目录,并发出以下命令:
grep -r "module _" . | wc -l
产生以下结果:
843
每当我遇到这样的匿名模块(我假设这就是它们的名称)时,我完全不知道它们的目的是什么,尽管它们明显无处不在,也不知道如何使用它们,因为根据定义,我无法使用它们访问它们的内容他们的名字,虽然我认为这应该是可能的,否则他们将没有意义,甚至允许他们被定义。
维基页面:
https://agda.readthedocs.io/en/v2.6.1/language/module-system.html#anonymous-modules
有一个名为“匿名模块”的部分实际上是空的。
有人可以解释匿名模块的目的是什么吗?
如果可能的话,任何强调这些模块定义的相关性以及如何使用它们的内容的例子都将非常感激。
以下是我想出的可能的想法,但似乎没有一个是完全令人满意的:
- 它们是一种在 Agda 文件中重新组合主题相同的定义的方法。
- Agda 在使用它们提供的功能时以某种方式推断出它们的名称。
- 它们的内容仅在其 englobing 模块中可见/使用(有点像
private
块)。
解决方案
匿名模块可用于简化共享某些参数的一组定义。例子:
open import Data.Empty
open import Data.Nat
<⇒¬≥ : ∀ {n m} → n < m → n ≥ m → ⊥
<⇒¬≥ = {!!}
<⇒> : ∀ {n m} → n < m → m > n
<⇒> = {!!}
module _ {n m} (p : n < m) where
<⇒¬≥′ : n ≥ m → ⊥
<⇒¬≥′ = {!!}
<⇒>′ : m > n
<⇒>′ = {!!}
Afaik 这是匿名模块的唯一用途。当module _
范围关闭时,您不能再引用该模块,但您可以引用它的定义,就好像它们根本没有在模块中定义一样(而是使用额外的参数)。
推荐阅读
- email - 可以通过向单个收件人发送大量电子邮件来提高电子邮件发件人的声誉吗?
- javascript - 如何在jquery数据表的渲染函数中添加if条件
- amazon-web-services - 将文件上传到 S3 时出错:我们计算的请求签名与您提供的签名不匹配
- javascript - 从 BE 获取数据的 Reactjs 渲染问题
- reactjs - 在函数调用之前设置 React 钩子状态
- r - AII 假设 - hmftest
- python - 为什么相同数据的标准差不为零?
- tensorflow - 为什么在 Keras 中 resnet 模型大小是 VGG 的 3 倍
- ionic-framework - 离子日历事件未在设备上加载
- javascript - 以特定角度在对角线上滑动元素