Stack 坚持使用 Cabal 构建包

4
我正在使用 Stack 进行 Haskell 项目开发。 最近,我们开始使用 lens 包,该包需要 Cabal 包作为依赖项,但是由于在一些旧机器上构建项目时构建 Cabal 包的资源消耗太大,因此我们切换到了 lens-simple
然而,尽管 lens-simple 或任何其他包都没有依赖于 Cabal 包,但 Stack 仍然会尝试构建它。
有没有办法让 Stack 停止这样做?这使得大多数机器上的构建过程非常漫长,在较弱的机器上则无法完成。
项目依赖项列表:
HUnit 1.6.0.0
QuickCheck 2.12.6.1
ansi-terminal 0.8.2
array 0.5.3.0
base 4.12.0.0
binary 0.8.6.0
bytestring 0.10.8.2
call-stack 0.1.0
clock 0.7.2
colour 2.3.4
containers 0.6.0.1
deepseq 1.4.4.0
directory 1.3.3.0
erf 2.0.0.0
filepath 1.4.2.1
ghc-boot-th 8.6.3
ghc-prim 0.5.3
hspec 2.6.1
hspec-core 2.6.1
hspec-discover 2.6.1
hspec-expectations 0.8.2
integer-gmp 1.0.2.0
lens-family 1.2.3
lens-family-core 1.2.3
lens-family-th 0.5.0.2
lens-simple 0.1.0.9
mtl 2.2.2
ncurses 0.2.16
netflak 0.1.0.0
pretty 1.1.3.6
primitive 0.6.4.0
quickcheck-io 0.2.0
random 1.1
rts 1.0
setenv 0.1.1.3
stm 2.5.0.0
template-haskell 2.14.0.0
text 1.2.3.1
tf-random 0.5
time 1.8.0.2
transformers 0.5.5.0
unbounded-delays 0.1.1.0
unix 2.7.2.2

1
我认为 lens 没有依赖于 cabal。你为什么这么想? - Sibi
1
@Sibi 我认为是因为 lens 有一个自定义设置,请查看 .cabal 文件中的 custom-setup 段落。 - Thomas M. DuBuisson
1个回答

4
我的猜测是,你的某个依赖项使用了自定义的设置语句,其中Stack需要针对Cabal库构建Setup.hs文件,因此出现了隐式依赖关系。关于Stackage,我们已经进行了一些讨论,是否应该像今天这样提供最新版本的Cabal库,从而冒着强制人们构建重型依赖项的风险,还是坚持使用GHC附带的Cabal版本。
无论如何,你可以通过一个略微复杂的方法来解决这个问题,创建一个删除了Cabal库的自定义快照。它会类似于这样:
# stack.yaml: point to the custom snapshot
resolver: snapshot.yaml

# snapshot.yaml: use the original snapshot and add a drop-packages
resolver: nightly-2019-03-17
name: drop-cabal
drop-packages:
- Cabal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接