NameG
생성자에 대한 작은 따옴표 구문을 항상 사용할 수 있습니까? 예 : Template Haskell 이름을 desugar 'x를 NameG로 인용 하시겠습니까?
'x
은 항상 옳다,
(Name (OccName "x") (NameG VarName (PkgName "some-package") (ModName "SomeModule")))
에 하스켈 후 실행 단계 템플릿입니다 이름 확인 후 항상이 있어야이 정보를, desugar는 무엇입니까? 그리고 나는 최상위 이름을 인용하는 것에 만 관심이 있지만, 지역 이름을 인용 할 수 없었다.
컨텍스트 : 고유 식별자를 반환하는 함수를 작성하고 싶습니다. Template Haskell은 출력을 불확실성으로 감싸고 싶지 않지만 입력을 제한 할 수 없기 때문에 부분 함수입니다. '
을 사용하면 준 인용 부호 또는 접합 문자를 사용하고 싶지 않습니다.
(<=>) :: Name -> a -> Named a
:
name (Name occ (NameG _ pkg mod)) = Unique occ pkg mod
내가 같은 기능을 갖고 싶어 : 나는 주어진, 동일한 모듈에서, 위와 같이 인용 최상위 이름을 사용하는 경우이 부분 함수가 런타임에 안전하다는 것을 증명하려면
주어진 :
:data Named a = Named a Unique
변수 바인딩을 주석 컴파일시에 접합을 무거운 스플 라이스 구문 $(name ...)
을 사용하고 호출 할 필요가 사용자없이3210
x = 'x
<=> ...
:
x = $(name 'x)
<=> ...
사용자는 구성을 위해, 많은 이들의를 작성합니다.
https://downloads.haskell.org/~ghc/7.8.3/docs/html/users_guide/template-haskell.html 및 https://hackage.haskell.org/package/template-haskell-2.8.0.0/docs/src/Language-Haskell-TH-Syntax.html#Name은 말하지 않았습니다.
(p.s. 또한 동일한 것으로 예상 되긴하지만 이중 따옴표 구문 (예 : ''T
)에 유사한 보증이 있는지 알고 싶습니다.) '인용 이름이 컴파일 타임에 알려져 있기 때문에
'$ (stringE $ Data.Generics.gshow'x)의 let x =()는''(NameL (1627422417)))'' – aavogt