从Template Haskell代码生成最终代码

时间:2013-07-17 22:26:59

标签: templates haskell compilation compile-time template-haskell

问题

是否可以从包含Template Haskell函数的代码生成“纯”Haskell代码?

我想获得所有Haskell Template的qutations和splices扩展的代码? (将它提供给另一个Haskell编译器(Haste),它还不支持Template Haskell。)

示例

模块TupleReplicate:

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

主:

main :: IO ()
main = do
    print $(tupleReplicate 3) "x"
    return ()

可以扩展为:

main :: IO ()
main = do
    print (\x->(x,x,x)) "x"
    return ()

2 个答案:

答案 0 :(得分:2)

使用Template Haskell漂亮打印机的解决方案可以在这里找到: Preferred method for viewing code generated by Template Haskell

还有其他工具,这里回答了一个问题: How to create a non-TH package from code generated using Template Haskell?

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

答案 1 :(得分:0)

最简单的方法是使用-ddump-splices编译(或在GHCi中解释)。