2013-02-16 2 views
0

저는 실제로 아주 잘 작동하는 작은 DSL을 가지고 있습니다. 내가Quasi Quoter없이이 작업을 수행 할 수 있습니까?

import language.CWMWL 

main = runCWMWL $ do 
    out (matrixMult, A, 1, row, 1 3 44 6 7) 

을 말할 때 다음 runCWMWLlanguage.CWMWL 내 보낸 함수입니다. 이것은 experession을 구문 분석하고 어떤 조치를 취합니다.

내가 달성하고 싶은 것은 이것을 반복 할 수있는 방법이 있다는 것입니다. 1000 번이고 튜플의 세 번째 요소는 1에서 1000 사이의 숫자로 구성됩니다. 내 자신의 DSL은이 작업을 수행하기에 충분하지 않습니다. 결국 나는 마지막 요소의 문자열도 변경하려고합니다.

따옴표없이이 작업을 수행 할 수 있습니까? 준 인용문은 이것을위한 최상의 도구입니까?

우아한 방식으로 허용하려면 내 DSL에 포함 시키거나 줄이기해야하는 binops/프리미티브는 무엇입니까? 내가 오해 해요 않는

+2

그 튜플의 마지막 필드에서 구문 적으로 무슨 일이 벌어지고 있습니까? – jberryman

+0

공백으로 구분 된 목록. –

답변

2

, 나는 quasiquotation 당신에게 다른 아이디어 또한 MonadComprehensions으로 보일 수 있습니다

main = runCWMWL $ 
    sequence [ out (matrixMult, A, n, row, 1 3 44 6 7) | n <- [1..1000] ] 

보다 훨씬 더 좋은 뭔가뿐만 아니라 RebindableSyntax를 얻을 것이다 생각하지 않습니다.

+0

... 글쎄, 실제로는 quasiquotation 솔루션이 컴파일 시간에 확장 될 것이라고 생각하지만, GHC가 위의 작업에 얼마나 많은 평가를하는지는 알지 못합니다. – jberryman

+0

당신은 물론 모든 것을 가지고 있습니다. 두 번째 방법은 그에 따라 DSL을 확장하는 것이지만 현재 어떤 binops 및 프리미티브를 추가해야하는지 알지 못합니다. 나는 그 질문을 편집했다. –

관련 문제