我如何查询当前的 GHCi 环境?

How can I interrogate the current GHCi environment?

我想生成此图的修改后的新版本,它出现在 Haskell98 标准中:

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

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

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

我花了很多时间在the GHC API documents中四处寻找,但我没有找到我需要的入口点。

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

What are good ways to proceed with this? Where should I be looking?

谢谢。

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