如果我跑:
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
等......?
答案 0 :(得分:2)
你可能不能。接头仅适用于模式,表达式,声明和类型。这不是任何一个,因为它只是一个名字。
同样,您不能使用Template Haskell
在其他地方拼接名称 [d| $(mkName "f") x = x |] -- invalid
如您所述,使用asP
最接近的是
asP (mkName "zs") [p| z:_ |]