我正在尝试使用 GHC 核心数据类型。
我能够使用 Bind CoreBndr
类型将 Haskell 源代码编译为核心表示形式。
我们知道,此数据类型没有默认的 Show
实例。
有一种方法可以漂亮地打印这个表示,但它有太多与之相关的噪音。
我想将 GHC 核心视为任何其他代数数据类型并用它编写函数。
如果我们有一个 GHC 核心的 Show
实例,那就容易多了。
有人已经编写了一个我可以重用的 show 实例吗?
另外,社区如何编写和验证处理 GHC 核心的程序?
最佳答案
GHC 中 Show
的简单实现可能不是您想要的。原因是 GHC 内部的许多数据类型都有递归。例如,TyCon之间, AlgTyConRhs ,和DataCon我们有:
TyCon
有 AlgTyCon
,其中包含 AlgTyConRhs
。
AlgTyConRhs
包含 data_cons::[DataCon]
作为其记录字段之一。
DataCon
包含 dcRepTyCon::TyCon
作为其字段之一。
这样我们就回到原点了。由于 Show
的工作原理,如果您尝试打印它,这样的递归将创建无限的输出。
为了获得带有数据构造函数和所有显示内容的“漂亮”自定义表示,您必须自己编写它。这实际上有点具有挑战性,因为您必须考虑和调试默认 pretty-print 已经解决的递归情况。
关于haskell - `Show` GHC 核心实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42342162/