我一直在玩TemplateHaskell,我遇到了this问题,这基本上是
你无法做到
keyword name = [d| data $(name) = $(name) |]
您必须执行类似
的操作keyword name = return [DataD [] name [] [NormalC name []] []] where
name' = mkName name
代替。
显然,原因与一些类型检查问题有关。所以问题是, 为什么模板Haskell使用复杂的AST而不仅仅是字符串。如果这样会更容易 一个splice返回一个简单的字符串,并在扩展文件上进行类型检查?