如何替换`[p |中的`zs` zs @(z:_)|]`我自己生成了一个名字?

时间:2016-06-05 21:56:44

标签: haskell template-haskell

如果我跑:

app/controllers

我想用自己生成的名字替换> runQ [p| zs@(z:_) |] AsP zs_46 (InfixP (VarP z_47) GHC.Types.: WildP) zs。我可以替换z

z

但我无法弄清楚如何替换> let z = mkName "z" > runQ [p| zs@($(varP z):_) |] AsP zs_48 (InfixP (VarP z) GHC.Types.: WildP) 。有没有办法在引号内做,或者我是否必须诉诸zs等......?

1 个答案:

答案 0 :(得分:2)

你可能不能。接头仅适用于模式,表达式,声明和类型。这不是任何一个,因为它只是一个名字。

同样,您不能使用Template Haskell

在其他地方拼接名称

[d| $(mkName "f") x = x |] -- invalid

如您所述,使用asP最接近的是

asP (mkName "zs") [p| z:_ |]