如何查询当前的 GHCi 环境?

MJD*_*MJD 4 reflection haskell ghc ghci

我想生成这个图的修订版,它出现在 Haskell98 标准中:

在此处输入图片说明

在 2019 年,我将通过生成我想要的图的描述并将其提供给 Graphviz 来做到这一点。我昨天做的一个概念验证实现,只告诉有一个叫做 的东西Monad,可以自动生成这个图:

在此处输入图片说明

概念验证程序相当糟糕,因为它遍历图形的方式是:info向 GHCi发送命令并尝试解析输出。我对进一步推动这种方法不感兴趣。

正确的做法是弄清楚 GHC 在内部如何表示类和实例信息,然后使用其 API 直接查询这些数据结构。

我花了相当多的时间在GHC API 文档中四处寻找,但我还没有找到我需要的入口点。

我想我想向 GHC 索取当前范围内所有类型类和实例信息的名称列表,以及对每个类型的约束的描述。

有什么好的方法来处理这个问题?我应该去哪里找?

谢谢。

Car*_*arl 5

为此,我首先查看模板 Haskell。各种reify 函数可让您从编译器环境中提取信息。我没有这方面的概念证明,但看起来它应该是可行的。