0

您可以在这个简单的示例中看到它如何重命名类型和值构造函数 from以及A从表达式引用转换为 AST:A_0A_1

Prelude Language.Haskell.TH> runQ [d|data A = A|]
[DataD [] A_0 [] [NormalC A_1 []] []]

如何强制名称保持我指定的方式?

4

1 回答 1

1

名称重整类似于 Lisp 世界中所谓的“卫生宏”功能,其中宏发出的代码中使用的名称被重整,这样它们就不会干扰使用宏的代码中相同的命名符号。

模板 haskell 语法基本上是生成 TH 包中定义的普通数据类型的快捷方式。在你的例子中,你可以使用这样的东西来获得你想要的名字:

runQ (return $ [DataD [] (mkName "A") [] [NormalC (mkName "A") []] []])

但请记住,如果使用此宏的代码已经有一个名为 A 的数据减速,这可能会导致名称冲突。

于 2013-11-01T16:45:11.183 回答