2016-06-05 3 views
2

나는 실행하는 경우 :`[p |`에`zs`를 어떻게 대치합니까? zs @ (z : _) |]`나는 자신을 생성하는 이름을 가지고 있습니까?

> runQ [p| [email protected](z:_) |] 
AsP zs_46 (InfixP (VarP z_47) GHC.Types.: WildP) 

내가 나 자신을 생성 이름 zsz를 교체하고 싶습니다. 나는 z를 대체 할 수

> let z = mkName "z" 
> runQ [p| [email protected]($(varP z):_) |] 
AsP zs_48 (InfixP (VarP z) GHC.Types.: WildP) 

하지만 zs을 교체하는 방법을 알아낼 수 없습니다. 따옴표 안에 그것을 할 수있는 방법이 있습니까 아니면 asP, 등등 리조트해야합니까?

답변

2

아마도 그렇게 할 수 없습니다. 스플 라이스는 패턴, 표현식, 선언 및 유형에 대해서만 작동합니다. 이것은 단지 이름이기 때문에 이것은 아무 것도 아닙니다. 당신은 당신이 얻을 가장 가까운

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

입니다 언급 한 바와 같이

마찬가지로 당신은 asP를 사용

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

템플릿 하스켈과 다른 장소에서 이름을 스플 라이스 수 없습니다