我想产生此图的修订的新版本,该版本出现在Haskell98标准中:
[在2019年,我将通过生成所需图形的描述并将其提供给Graphviz来进行此操作。我昨天做过的概念验证实现,只告诉我们有一个名为Monad
的东西可以自动生成此图:
概念验证程序相当糟糕,因为它遍历图形的方式是通过向GHCi发送:info
命令并尝试解析输出。我对进一步推广这种方法不感兴趣。
正确的方法是弄清楚GHC如何在内部表示类和实例信息,然后使用其API直接查询那些数据结构。
我花了很多时间浏览the GHC API documents,但没有找到所需的切入点。
我想我想请GHC列出当前作用域内所有类型类的名称和实例信息的列表,以及对每个约束的描述。
进行此操作的好方法是什么?我应该在哪里看?
谢谢。
我将首先查看模板Haskell。各种reify functions允许您从编译器环境中提取信息。我对此没有概念证明,但看起来应该可行。