2017-11-02 21 views
4

나는 내가 지금 같은 CPP 조건부 추가하여베이스와의 하위 호환성을 얻을 수있는 것으로 나타났습니다 :haskell 패키지에 대해 cpp MIN_VERSION 조건문을 사용할 수 있습니까?

moo :: Moo 
moo = Moo 
    { happyMoo = Sound "moo" 
#if MIN_VERSION_base(4,9,1) 
    , upgradedMoo = Sound "moo" 
#endif 
    , sadMoo = Sound "moo" 
    } 

하지만 내가 패키지 레벨의 종속성을 지정 오류가 발생합니다 (예 : #if MIN_VERSION_optparse-applicative(0,13,0) 같은 것을 사용) 내가 ' 이 GHC 기능에 대한 문서를 찾는 데 어려움을 겪고 있습니다.

MIN_VERSION_optparse-applicative과 같은 것이 있는지 궁금한데, 그렇지 않다면 어떻게 hackage maintainers가 코드를 이전 버전과 어떻게 호환합니까?

+0

'MIN_VERSION_optparse-applicative'는 유효하지 않은 CPP 식별자입니다. 'MIN_VERSION_optparse_applicative'를 시도하십시오. – freestyle

+0

아아아, 나는 그것을 시도했지만 이번에는 효과가 있었다. 이전에 네 개의 버전 번호를 사용하고있는 것처럼 보입니다. 여기서 매크로는 세 개의 숫자를 사용해야합니다. – stites

답변

5

매크로는 herehere을 찾을 수 있습니다.

여기서 문제는 그러한 매크로에서 패키지 이름이 엉망이된다는 것입니다. 특히, 대시는 밑줄로 대체됩니다. 그래서 예.

{-# LANGUAGE CPP #-} 

foo :: String 
foo = 
#if MIN_VERSION_optparse_applicative(0,13,0) 
    "x" 
#else 
    "y" 
#endif 
+0

고마워요! 네, 매크로를 깨뜨린 네 개의 버전 번호를 사용하기 전에처럼 보입니다. – stites