模板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) |]

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

最佳答案 你正试图拼接一个名字或一个模式.不幸的是,这是不可能的.模板Haskell只允许拼接表达式,类型和声明,所以你不得不像在原始代码中一样手动操作.

有关不允许使用模式拼接的一些原因,请参见GHC #1476.

点赞