템플릿 하스켈에서 Q
모나드는 모든 마술이 일어나는 곳입니다. 그러나 Q
에는 매우 제한된 API가 있습니다. 나는 valueNameStore :: Q (String -> Maybe Name)
타입의 값을 갖고 싶다. 기본으로는 lookupValueName :: String -> Q (Maybe Name)
이지만 아직 사용 가능한 변수의 저장소는 바인딩되어있다. Q 모나드에서 가치 환경 추출
valueNameStore
에 바인드라는
Q
의 상태의 스냅 샷입니다 공유 일정한 상태에 관하여를 수행하고있는 경우 내 조회 염기 서열을 할 필요가 없습니다. 이
수없는 경우
, 안전하지 않은 방법으로 그것을 통해 강제의 방법은 무엇입니까? 나는 해킹이 무엇이든간에 자신을 낮추려고한다 unsafePerformIO
...
표현식을 평가할 때 매핑에있는 매핑을 가져 오려고한다면 어떻게해야합니까? 'unsafePerformIO'가 어떻게 도움이 될지 모르겠습니다. 네, 스냅 샷 아이디어는 제가 생각한 것입니다,하지만 ... 많은 것들이 범위에 있습니다. Prelude조차도 ... – Alec
다시 'unsafePerformIO'는 여기서 도움이되지 않습니다. 'lookupValueName'는'Q' 모나드에 있고 대부분의 연산 (즉 모든 룩업 이름)은'Q' 모나드를 벗어날 수 없습니다. – Alec
의도적 인 공격은 아니지만 귀하가 제안하고있는 것을 시도하고 있습니까? 'Quasi'의'IO' 인스턴스는 어떤 룩업도 허용하지 않습니다. (http://hackage.haskell.org/package/template-haskell-2.11.1.0/docs/src/Language.Haskell.TH.Syntax. html # line-124). 'runQ'는 도움이되지 않습니다. 실제로 (AFAIK)는'Q'를 벗어날 수 없습니다. – Alec