模板Haskell声明的名称作为字符串

时间:2013-05-02 06:56:39

标签: haskell template-haskell

说我有这个:

f x = x + 1

tt2 name o = sequence [valD (varP (mkName name)) (normalB [| f $(varE o) |]) []]

我想将tt2转换为tt

tt name o = [d| ??? = f $(varE o) |]

我无法弄清???应该是什么。这可能是因为我不明白它是如何工作的。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

您正在尝试拼接名称或模式。不幸的是,这是不可能的。模板Haskell只允许拼接表达式,类型和声明,所以你就像在原始代码中一样手动操作。

请参阅GHC #1476,了解不允许使用模式拼接的一些原因。