Haskell 我怎么能对阴谋集团有条件?
我有一个Haskell库,它导出了几个模块。我使用Haskell 我怎么能对阴谋集团有条件?,haskell,cabal,Haskell,Cabal,我有一个Haskell库,它导出了几个模块。我使用GHC和GHCJS编译该库。我正在使用stack构建库。其中一个模块依赖于反射dom。问题是我无法在GHC上编译reflection dom,因为无法在OSX上链接gtk+3。因此,如果编译器是GHC,我希望排除该库。我怎样才能做到这一点 exposed-modules: MyLib.Foo MyLib.Bar MyLib.App.Backend.Reflex MyLib.App.Backend.Gloss ... buil
GHC
和GHCJS
编译该库。我正在使用stack
构建库。其中一个模块依赖于反射dom。问题是我无法在GHC上编译reflection dom
,因为无法在OSX上链接gtk+3
。因此,如果编译器是GHC
,我希望排除该库。我怎样才能做到这一点
exposed-modules:
MyLib.Foo
MyLib.Bar
MyLib.App.Backend.Reflex
MyLib.App.Backend.Gloss
...
build-depends:
base ...
reflex-dom >= 0.2 && <0.3
公开模块:
MyLib.Foo
MyLib.Bar
MyLib.App.Backend.reflection
MyLib.App.Backend.Gloss
...
构建取决于:
基础
Reflection dom>=0.2&&虽然您可能不想这样做,但在cabal用户手册的“配置”部分中描述了这样做的方法:
特别是,您应该能够编写如下相关章节:
exposed-modules:
MyLib.Foo
MyLib.Bar
MyLib.App.Backend.Reflex
MyLib.App.Backend.Gloss
if !impl(ghc)
exposed-modules:
OtherModule
build-depends: etc, etc, etc
if !impl(ghc)
build-depends: etc1, etc2
这是可能的。但是,强烈建议API独立于cabal文件中的条件,因为其他库编写器不可能依赖条件的值。特别是,公开或不公开模块是API的一部分。那么我该如何解决这个问题呢?我必须有一个全新的项目,“MyLib GHCJS stuff”,只是为了那些无法在主项目上编译的东西,即GHC。这似乎根本不对。理想情况下,编译器只是后端目标的一个选择,它不应该反映项目的组织。对,你会有一个可移植的包和一个不可移植的包。