2014-10-22 3 views
6

내 프로그램의 작은 블록을 다른 플랫폼에서 다르게 동작시켜야합니다. GHC가 크로스 컴파일에별로 좋지 않은 것 같아서 리눅스와 윈도우에서 같은 코드를 컴파일 할 계획입니다.하스켈에서 멀티 플랫폼 개발

이 작업을 수행하는 데 권장되는 방법은 무엇입니까? 하나의 모듈을 여러 버전으로 작성해야합니까, 아니면 하나의 코드 블록을 조건부로 컴파일하기 위해 코드에 넣을 수있는 전 처리기 지시문 같은 것이 있습니까?

P.S. 관리를 위해 GHC와 Cabal을 사용하고 있습니다.

답변

6

GHC 지원 running your code through a C preprocessor. 그것은 하스켈 해법은 아니지만 필요하다면 실제로 사용됩니다.

편집 : 제타가 이것에 대한 파일 별 언어 옵션 (난 정말 알고 있지만 그것이 위의 링크에 언급되지 않은 것) 지적 : 비밀 결사단, 당신이 할 수있는 use the extensions field를 들어

{-# LANGUAGE CPP #-} 

.

확장 : 식별자 목록

모든 모듈이 사용 하스켈 확장의 목록이 바로이 사용 사례를 언급하고 있기 때문에, 인용합니다. 확장 이름은 확장 유형의 생성자입니다. 이것은 대응하는 컴파일러 옵션을 결정합니다. 특히, CPP는 Haskell 소스 파일이 C 전처리기를 사용하여 사전 처리되도록 지정합니다. 하나 개의 모듈이 사용

확장이 영향을받는 소스 파일의 언어 프라그를 배치하여 지정 될 수있다 예를 들면 : {- # 언어의 CPP, MultiParamTypeClasses 번호 -}

+4

GHC는 -cpp''이 있지만 , 파일별로 '{- # LANGUAGE CPP # -}'이 (가) 선호되지 않습니다. – Zeta