GHC在某个程序包通过依赖关系依赖于同一程序包的不同实例时发出警告,例如:
Configuring tasty-hspec-1.1.5.1...
Warning:
This package indirectly depends on multiple versions of the same package.
This is very likely to cause a compile failure.
package hspec-core (hspec-core-2.5.5-H06vLnMfEeIEsZFdji6h0O) requires
clock-0.7.2-9qwmBbNbGzEOSffjlyarp
package tasty (tasty-1.1.0.3-I8Vu9v0lHj8Jlg3jpKXavp) requires
clock-0.7.2-Cf9UTsaN2AjEpBnoMpmgkU
关于此警告,我不清楚两件事:
(Int, Int)
类型的东西,包的两个实例都切换字段的顺序。)答案 0 :(得分:4)
这不是GHC发出的关于多个软件包版本的警告。 GHC只是编译指定的软件包...几乎没有人手工做过,但是让Stack或Cabal为他们做。在这种情况下,阴谋集团会发出警告消息。
如果不同版本引起问题,实际上您几乎总是在编译时看到它。这通常是一个缺少实例的错误,因为例如尝试使用Foo
中的pkg-1.0
类和Bar
中的类型pkg-2.0
。公共接口中数据类型的直接版本不匹配也会发生。
从理论上说,我认为也可能会出现类似(Int,Int)
的错误,这意味着两个不同的东西,编译器将无法捕获。但是,无论如何,这种变化都在麻烦。每当某些数据字段的顺序不完全清楚并且将来可能会更改时,应使用data
记录来确保编译器可以捕获它。 (这在很大程度上与different-versions-of-same-package
问题正交。)
如果您希望避免任何版本不匹配的问题,可以使用Stack而不是Cabal。我认为这是很多Haskeller都更喜欢Stack的原因的一部分。