要使用兩種GHC或急速建立一個驚天動地的項目,使用cabal
二進制對於前者,和haste-inst
(隨匆匆)爲後者。
要在您的模塊中添加條件代碼,請添加{-# LANGUAGE CPP #-}
並使用#ifdef __HASTE__
,它只能由haste定義,而不能由GHC定義。請注意,__GLASGOW_HASKELL__
在兩種情況下都被定義(這很有意義,因爲大部分編譯都是基於GHC構建的)。所以,你可以使用它像
{-# LANGUAGE CPP #-}
module Module where
compiler :: String
#ifdef __HASTE__
compiler = "haste"
#else
compiler = "GHC"
#endif
理論上,對於有條件的設置在驚天動地的文件這樣的事情應該工作:
library
exposed-modules:
Module
if impl(ghc)
exposed-modules:
Module.GHC
if impl(haste)
exposed-modules:
Module.GHC
build-depends: base ==4.6.*
但似乎即使有haste-inst
,impl(ghc)
是真實的; bug report已提交。
謝謝!我可以使用不同的'project.cabal'選項嗎?在代碼中,我可以使用'#ifdef',並且我想要例如JS版本不具有'graphviz'的'build-depends'? –
額外 - '{ - #LANGUAGE CPP# - }'與'ghc cpp後端'有什麼關係?我想使用'LLVM'後端。 –
@ danilo2要回答第二個問題:CPP雜注不必對C++做任何事情。它允許使用[C預處理程序](http://en.wikipedia.org/wiki/C_preprocessor) - 又名「cpp」。 cpp只使用#if和#ifdef做有條件的_preprocessing_(包括或排除部分代碼),但通常(在Haskell中)不會影響編譯本身。 – phg