请注意:
template-haskell
中的Exp
对应GHC AST中的HsExpr
template-haskell
中的Type
对应GHC AST中的HsType
template-haskell
中的Dec
对应GHC AST中的HsDecl
但是,template-haskell
类型中缺少一组构造函数:与TH拼接和quasiquotes相关的构造函数。例如,为什么Exp
没有以下形式的构造函数?
SpliceE :: Exp -> Exp
我偶然发现了这个here。我想知道是否有一些基本的东西,或者只是需要额外的工作来充实TH类型?我怀疑问题在于,有人可以将TH发送到无限循环 - 有一个拼接生成另一个拼接,依此类推。也就是说,已经有很多方法可以使GHC发散......:)
我的用例是希望有一个额外的TH阶段(这样我可以将值提升到类型级别 - 在父级阶段它是一个值,但我可以生成具有该值的代码提升到类型级别使用promote
)