我刚刚开始新鲜,我在package.conf.d
删除了~/.ghc/x86_64-linux-7.8.2
。
当我尝试安装numeric-prelude
时,cabal会尝试安装旧版本的mtl
,即使我已经检查了所有依赖项并且可以使用最新的mtl
。< / p>
这是一个较小的例子,展示了(希望)相关的问题:
$ cabal install QuickCheck parsec --dry-run
Resolving dependencies...
In order, the following would be installed (use -v for more details):
mtl-2.1.3.1 (latest: 2.2.1)
primitive-0.5.3.0
random-1.0.1.1
text-1.1.1.3
parsec-3.1.5
tf-random-0.5
QuickCheck-2.7.5
但可以自行安装:
$ cabal install QuickCheck --dry-run
Resolving dependencies...
In order, the following would be installed (use -v for more details):
primitive-0.5.3.0
random-1.0.1.1
tf-random-0.5
QuickCheck-2.7.5
$ cabal install parsec --dry-run
Resolving dependencies...
In order, the following would be installed (use -v for more details):
text-1.1.1.3
transformers-0.4.1.0
mtl-2.2.1
parsec-3.1.5
并且都不需要mtl-2.1.3.1
!
问题与numeric-prelude
类似:我使用mtl-2.2
安装了所有列出的依赖项而没有问题。然后,当我尝试安装numeric-prelude
时,cabal会尝试安装旧版mtl
。
我认为,即使我已经堵塞了我的cabal pacakges,删除用户package.conf.d
也会解决这个问题。那么我的阴谋集团仍然被淹没,或者还有其他事情发生在这里?
答案 0 :(得分:4)
我可以&#34;修复&#34;这在我的机器上说:
cabal install QuickCheck parsec --constraint="transformers == 0.4.*"
在这种情况下的问题是QuickCheck
依赖于变换器,并且首选是选择已安装的版本,即transformers-0.3.0.0
。但是这种transformers
的选择现在与选择最新的mtl
不一致。现在,Cabal必须选择违反两个偏好中的哪一个(选择transformers
的更高版本来构建QuickCheck
,或者选择较旧版本的mtl
)。它随机选择一个,在这种情况下,这恰好不是你想要的那个......添加额外的约束会有所帮助。
对于numeric-prelude
,情况略有不同。最新版本的numeric-prelude
取决于storable-record
,transformers < 0.4
明确取决于numeric-prelude
。但parsec
还取决于mtl
,这取决于mtl
。因此,您无法将其与最新的{{1}}一起使用。