다중 행 문자열 리터럴을 포함하는 하스켈 코드에서 CPP 확장을 사용할 수 있습니까? Haskell을위한 다른 조건 컴파일 기술이 있습니까? 예를 들어하스켈의 CPP 확장 및 다중 라인 리터럴
,의이 코드 보자 :
[1 of 1] Compiling Main (cpp-multiline.hs, cpp-multiline.o)
cpp-multiline.hs:4:17:
lexical error in string/character literal at character 'o'
가 GHC 6.12.1을 사용 cpphs가 있습니다 : 나는 {-# LANGUAGE CPP #-}
주석을 제거하면
-- If the next line is uncommented, the program does not compile.
-- {-# LANGUAGE CPP #-}
msg = "Hello\
\ Wor\
\ld!"
main = putStrLn msg
을 다음 GHC는 어휘 오류로이 코드를 반박 .
나는 cpphs.compat 래퍼와 -pgmP cpphs.compat
옵션을 사용하는 것이 도움이되지만 사용자 지정 쉘 스크립트에 의존하지 않는 솔루션을 갖고 싶습니다. -pgmP cpphs
이 작동하지 않습니다.
P. GHC < 6.12와 GHC> = 6.12에 대해 다른 코드를 사용할 필요가 있는데, 전 처리기없이 가능합니까?
UPD. Ganesh의 대답에 덧붙여, 또 다른 해결 방법은 모든 조건부 선언을 {-# LANGUAGE CPP #-}
이라는 별도의 모듈에 넣는 것입니다. 따라서 여러 줄 문자열을 사용하는 모듈에서 CPP를 피하십시오.
"Hello"++ "Wor"++ "ld!"'를 사용하지 않는 이유는 무엇입니까? – kennytm
''Hello \ whitespace + \ World! ''는 하스켈 98이기 때문에 사용하는 코드가 있기 때문에. 왜냐하면''++ '''는 더 많은 공간을 필요로하기 때문입니다. 마지막으로 프로젝트의 모든 다중 행 문자열을 다시 묶고 다시 포맷하지 않고 패치를 작성하고 싶습니다. – sastanin