我们有没有一种简单的方法来查看 agda 中详尽的核心术语?

Do we have an easy way to see elaborated core terms in agda?

我正在研究依赖模式匹配在 agda 中的工作原理。 如果我能看到 .agda 文件的任意源代码的详细核心术语(https://github.com/agda/agda/blob/master/src/full/Agda/Syntax/Internal.hs#L202), 这对我真的很有帮助。

但是,agda cli 似乎没有为这种用法提供任何选项。有吗?

根据您想要的详细程度,您可以尝试三种选择,不过其中 none 是完美的:

  1. 如果你只想看看 Agda 插入了哪些隐式参数,你可以启用标志 --show-implicit--show-irrelevant,用你想要的术语创建一个新的洞通过在文件底部添加 _ = {! yourTerm !} 来检查,使用 C-c C-l 重新加载文件,然后将光标放在孔内按 C-u C-c C-m。 [写出来让我意识到应该有更简单的方法来做到这一点。]

  2. 如果你想检查并可能操作 Agda 术语的完整 AST,你可以使用反射 API (https://agda.readthedocs.io/en/v2.6.2.1/language/reflection.html) 来实现。特别是,您可以使用 quoteTerm 原语获得任意 Agda 术语的反射语法。

  3. 最后,如果您需要更多信息,您可以查看 Agda 本身的源代码并启用调试标志以打印您想要的信息。请注意,不能保证此调试信息有用甚至可读,因为它旨在供开发人员使用。话虽如此,例如,您可以通过在文件顶部添加 {-# OPTIONS -v tc.cc:12 #-} 来打印通过模式匹配从定义生成的案例树。在 Emacs 中,此调试信息将在一个名为 *Agda debug* 的单独缓冲区中结束(您必须在加载 .agda 文件后手动打开它)。