从Template Haskell代码生成最终代码

Woj*_*ilo 5 templates haskell compilation compile-time template-haskell

问题

是否有可能从包含Template Haskell函数的代码生成"纯"Haskell代码?

我想得到所有Haskell模板的qutations和拼接扩展的代码?(将其提供给另一个Haskell编译器(Haste),它还不支持Template Haskell.)

module TupleReplicate:

tupleReplicate n = do 
    id <- newName "x"
    return $ LamE ([VarP id]) (TupE $ replicate n $ VarE id)
Run Code Online (Sandbox Code Playgroud)

主要:

main :: IO ()
main = do
    print $(tupleReplicate 3) "x"
    return ()
Run Code Online (Sandbox Code Playgroud)

可以扩展到:

main :: IO ()
main = do
    print (\x->(x,x,x)) "x"
    return ()
Run Code Online (Sandbox Code Playgroud)

Bol*_*eth 2

使用 Template Haskell 漂亮打印机的解决方案可以在这里找到: 查看 Template Haskell 生成的代码的首选方法

还有其他工具,如此处回答的问题: How to create a non-TH package from code generated using Template Haskell?

的结果-ddump-splices并不总是有效的 haskell 代码,它仅适用于程序员。