如何替换 `[p| 中的 `zs` zs@(z:_) |]` 我自己起的名字?
How to replace `zs` in `[p| zs@(z:_) |]` with a name I generate myself?
如果我运行:
> 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
。有没有办法在引号内做到这一点,或者我必须求助于 asP
,等等......?
你可能做不到。拼接仅适用于模式、表达式、声明和类型。这不是其中任何一个,因为它只是一个名称。
同样不能用模板拼接其他地方的名字Haskell
[d| $(mkName "f") x = x |] -- invalid
使用您提到的 asP
最接近的是
asP (mkName "zs") [p| z:_ |]
如果我运行:
> 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
。有没有办法在引号内做到这一点,或者我必须求助于 asP
,等等......?
你可能做不到。拼接仅适用于模式、表达式、声明和类型。这不是其中任何一个,因为它只是一个名称。
同样不能用模板拼接其他地方的名字Haskell
[d| $(mkName "f") x = x |] -- invalid
使用您提到的 asP
最接近的是
asP (mkName "zs") [p| z:_ |]