2013-05-14 4 views
5

필자는 haskell 파일을 읽고 조건부 컴파일을 사용하고자한다. 나는 문학 프로그래밍의 새 스타일을 사용한다. 다음 코드는 작동하지 않습니다.Literate Haskell 내부의 조건부 컴파일

> #if MIN_VERSION_base(4,6,0) 
> import Control.Exception 
> #endif 

나는 음모를위한 솔루션이 필요 1.14.0

편집 :

cpphs이 글을 읽고 소스 코드를 unlits 옵션 --unlit이 있지만, 나는이를 전달하는 방법을 모른다 cabal의 cpphs 옵션.

답변

4

@kosmikus가 지적한대로 > 또는 \begin{code} 외부에 C 전 처리기 지시문을 넣으면 문자 그대로 코드의 코드가 아닌 부분을 처리하는 데 방해가되지 않으면 예상대로 작동합니다.

새 스타일 지시문 프로그래밍에서 C 전처리 지시문을 사용할 수 없습니다. 단절 단계는 >을 공백으로 바꿔서 #을 첫 번째 열로 가져올 기회가 없기 때문입니다. -keep-tmp-files을 GHC에 전달하고 생성 된 .lpp 파일을 체크 아웃하여 확인할 수 있습니다.

당신은 모두를 얻을 수 \begin{code} ... \end{code} 블록에 의존하지만, 코드의 > 스타일 라인 그들에게 그것들을 혼합하는 경우, 마음에 여분의 공간을 유지하고 \begin{code}에 싸여 당신의 라인에 추가 할 수 있습니다 ... \end{code} :

> {-# LANGUAGE CPP #-} 

A literal comment 

\begin{code} 
#if MIN_VERSION_base(4,6,0) 
    import Control.Exception 
#endif 
\end{code} 

> main = return() 
+0

정말 코드 블록으로 전환해야합니까? CPP 지시어를'>'앞에 쓰지 않고 직접 소스 파일에 넣을 수는 없습니까? – kosmikus

+0

Ups, 나는 그것을 먼저 시도했다고 생각했지만 실제로 그렇습니다. –