haskell - `Show` GHC 核心实例

标签 haskell ghc

我正在尝试使用 GHC 核心数据类型。 我能够使用 Bind CoreBndr 类型将 Haskell 源代码编译为核心表示形式。 我们知道,此数据类型没有默认的 Show 实例。 有一种方法可以漂亮地打印这个表示,但它有太多与之相关的噪音。 我想将 GHC 核心视为任何其他代数数据类型并用它编写函数。 如果我们有一个 GHC 核心的 Show 实例,那就容易多了。 有人已经编写了一个我可以重用的 show 实例吗?

另外,社区如何编写和验证处理 GHC 核心的程序?

最佳答案

GHC 中 Show 的简单实现可能不是您想要的。原因是 GHC 内部的许多数据类型都有递归。例如,TyCon之间, AlgTyConRhs ,和DataCon我们有:

TyConAlgTyCon,其中包含 AlgTyConRhs

AlgTyConRhs 包含 data_cons::[DataCon] 作为其记录字段之一。

DataCon 包含 dcRepTyCon::TyCon 作为其字段之一。

这样我们就回到原点了。由于 Show 的工作原理,如果您尝试打印它,这样的递归将创建无限的输出。

为了获得带有数据构造函数和所有显示内容的“漂亮”自定义表示,您必须自己编写它。这实际上有点具有挑战性,因为您必须考虑和调试默认 pretty-print 已经解决的递归情况。

关于haskell - `Show` GHC 核心实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42342162/

相关文章:

haskell - 函数变量和应用中的 ()

haskell - Haskell中是否有未标记联合类型的编译器扩展?

haskell - IncoherentInstances 选择了错误的实例

haskell - 在这个例子中,我对绑定(bind)运算符的 Haskell 定义有什么问题?

haskell - 限制 cabal 安装使用的内存?

haskell - 使用自定义数据类型过滤列表

python - 如何使 ST 计算产生惰性结果流(或像协程一样运行)?

haskell - cabal 更新: Local and remote files match

haskell /GHC : {-# SPECIALIZE #-} Causes 'RULE left-hand side too complicated to desugar' Warning

haskell - 混合 Erlang 和 Haskell