我如何查询当前的 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 让您从编译环境中提取信息。我没有这方面的概念证明,但它看起来应该是可行的。
我想生成此图的修改后的新版本,它出现在 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 让您从编译环境中提取信息。我没有这方面的概念证明,但它看起来应该是可行的。