Templates 从模板Haskell代码生成最终代码
问题 是否可以从包含模板Haskell函数的代码中生成“纯”Haskell代码 我想得到所有Haskell模板的量化和拼接都展开的代码?(将其输入另一个Haskell编译器(Haste),该编译器还不支持模板Haskell。) 示例 模块元组副本:Templates 从模板Haskell代码生成最终代码,templates,haskell,compilation,compile-time,template-haskell,Templates,Haskell,Compilation,Compile Time,Template Haskell,问题 是否可以从包含模板Haskell函数的代码中生成“纯”Haskell代码 我想得到所有Haskell模板的量化和拼接都展开的代码?(将其输入另一个Haskell编译器(Haste),该编译器还不支持模板Haskell。) 示例 模块元组副本: tupleReplicate n = do id <- newName "x" return $ LamE ([VarP id]) (TupE $ replicate n $ VarE id) 可扩展为: main :: I
tupleReplicate n = do
id <- newName "x"
return $ LamE ([VarP id]) (TupE $ replicate n $ VarE id)
可扩展为:
main :: IO ()
main = do
print (\x->(x,x,x)) "x"
return ()
最简单的方法是使用
-ddump拼接编译(或在GHCi中解释)
使用Template Haskell pretty printer的解决方案可以在以下位置找到:
还有其他工具,如对此处问题的回答:
-ddump拼接的结果
并不总是有效的haskell代码,它只适用于程序员。据我所知-ddump拼接
不会生成有效的haskell代码。
main :: IO ()
main = do
print (\x->(x,x,x)) "x"
return ()