gpt4 book ai didi

haskell - GHC 多包版本警告的严重性

转载 作者:行者123 更新时间:2023-12-02 01:16:55 24 4
gpt4 key购买 nike

当一个包通过依赖关系依赖于同一包的不同实例时,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

关于此警告,我不清楚两件事:

  1. 如果 GHC 发出警告,并且编译没有失败,那么一切都好吗?也就是说,同一包的微妙冲突实例是否仍然会导致不良行为? (我想象类似公共(public)接口(interface)中的类型 (Int, Int) ,包的两个实例都会切换字段的顺序。)
  2. 有没有办法让 GHC 因此警告而失败?

最佳答案

这不是 GHC 警告您有关多个软件包版本的信息。 GHC 只是编译指定的包...几乎没有人会手动执行此操作,而是让 Stack 或 Cabal 为他们执行此操作。在这种情况下,是 Cabal 发出警告消息。

如果不同的版本导致问题,实际上您几乎总是会在编译时看到它。这通常是缺少实例错误,因为您例如尝试将 pkg-1.0 中的类 Foopkg-2.0 中的类型 Bar 一起使用。公共(public)接口(interface)中数据类型的直接版本不匹配也可能发生。
理论上,我认为也可能出现像 (Int,Int) 这样的错误,它意味着两个不同的东西,而编译器不会捕获这些错误。不过,这种改变无论如何都是自找麻烦。每当某些数据字段的顺序不完全明显并且将来可能发生变化时,就应该使用data记录来确保编译器可以捕获它。 (这在很大程度上与同一包的不同版本问题是正交的。)

如果您想避免任何版本不匹配问题,可以使用 Stack 而不是 Cabal。我认为这是许多 Haskellers 更喜欢 Stack 的重要原因。

关于haskell - GHC 多包版本警告的严重性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57100591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com