我想知道,当您通过cabal下载并安装软件包时,cabal会尝试构建所有内容或仅构建您需要的内容。 例如很多包include和HaskellTemplate模块,它显然需要HaskellTemplate扩展。如果您使用不支持此扩展但不关心此模块的编译器会发生什么事情,因为您还没有使用它?
答案 0 :(得分:0)
当你从hackage cabal install
打包时,cabal也需要安装该软件包的所有依赖项。
通常,程序包中的所有文件都会被编译。但是,有一些例外:
为了说明第2点,请考虑以下包装定义:
name: foo
version: 0.1
flag withGHC
default: True
manual: False # Allow cabal to figure out the correct value for the flag automatically
library
exposed-modules:
Foo.Bar # This will always be compiled
if flag(withGHC)
build-depends: ghc
exposed-modules:
Foo.GHC # This will only be compiled when withGHC is True
现在,当您在GHC下安装foo
时,即使启用了标记,cabal也会发现它可以使依赖项饱和,因此将构建Foo.GHC
。
但是如果你尝试用另一个编译器安装foo
,cabal会在选择withGHC = True
时看到这导致依赖ghc
,它无法满足。因此,它将选择withGHC = False
,并且不会构建Foo.GHC
。