要使用 GHC 或 Haste 构建 Cabal 项目,请cabal
为前者使用二进制文件,haste-inst
为后者使用(附带 haste)。
要在您的模块中包含条件代码,请添加{-# LANGUAGE CPP #-}
和使用#ifdef __HASTE__
,这将仅由 haste 定义,而不是由 GHC 定义。请注意, __GLASGOW_HASKELL__
在两种情况下都定义了(这是有道理的,因为在 GHC 上构建了大部分编译的仓促)。所以你会像这样使用它
{-# LANGUAGE CPP #-}
module Module where
compiler :: String
#ifdef __HASTE__
compiler = "haste"
#else
compiler = "GHC"
#endif
从理论上讲,对于 Cabal 文件中的条件设置,这样的东西应该可以工作:
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)
也是真的;提交错误报告。