3
예를 들어 천 단어의 가치가 있습니다. 여기에 꽤 간단합니다. quasi quoter 방금 작성했습니다.템플릿의 변수 하스켈 커스텀 쿼티 퀴어
import Language.Haskell.TH.Quote
import Language.Haskell.TH.Syntax
quoter :: QuasiQuoter
quoter = QuasiQuoter { quotePat = parse }
where
parse :: String -> Q Pat
parse ('$':x) = pure (VarP (mkName x))
parse "_" = pure WildP
parse _ = fail "Invalid pattern"
그럼, x
에 바인딩 할 2
를 좋아했을
ghci> :set -XQuasiQuotes
ghci> [quoter|_|] = 2
ghci> [quoter|$x|] = 2
ghci> x
error: Variable not in scope: x
GHCi
에서 사용.parse
실제는 실제 작업을 수행합니다.
편집
다음 작품 :
ghci> inc [quoter|$x|] = x + 1
ghci> inc 2
3
다음은
ghci> let [quoter|$x|] = 1 in x
error: Variable not in scope: x
그래서 이것은 GHCi의 버그하지 않는 이유는 무엇입니까?
GHC 7.10.3에서 동작을 재현 할 수 없습니다. – Zeta
@Zeta Cool. 7.10.3에서 두 번 확인해 보도록하겠습니다. 그런 다음 버그를 신고하겠습니다. 그 일이 끝나면 여기로 다시 올리겠습니다. – Alec
[버그로 제출] (https://ghc.haskell.org/trac/ghc/ticket/13473#ticket). 참고 이것은 심지어 이것이 실제로 버그라고 확신하지는 않습니다. – Alec