如您所知,Template Haskell 用于在编译时以编程方式生成各种 AST 拼接。
但是,接头通常非常不透明,并且通常很难辨别接头实际生成的内容。如果您Q
为拼接运行 monad,并且拼接是正确类型的,您将获得show
生成的 AST 片段的有效表示,但由于其非结构化布局,这种表示可能很难理解。
将一段 TH 生成的 AST 转换为类似于普通 Haskell 代码的东西的首选方法是什么,以便代码易于阅读和理解?可以从例如给定Dec
值重构源代码吗?是否必须阅读 GHC 核心代码?有没有办法至少构建 AST 以使其更具可读性(超出例如pretty-show
包的功能)?