1

我像这样导入包 Data.Map :import qualified Data.Map as M,我有一个类型为:

> :t particleMap 
particleMap :: M.Map PID (Particle (Float, Float))

现在,我想将我的变量传递给particleMap类型如下的数据:

> :t Ensemble
Ensemble
  :: [([Edge], Point v -> Point v -> v)]
     -> containers-0.4.2.1:Data.Map.Map PID (Particle v) -> Ensemble v

请看第二个论点。它是containers-0.4.2.1:Data.Map.Map PID (Particle v),不喜欢Data.Map.Map,或者不喜欢M.Map。最后,它会导致如下错误:

Couldn't match expected type `containers-0.4.2.1:Data.Map.Map
                                    PID (Particle (Float, Float))'
                with actual type `M.Map PID (Particle (Float, Float))'

我仔细检查了包容器的版本,我注意到我已经安装了 2 个版本:

安装的版本:0.4.2.1、0.5.1.0

所以,我想,计算机与 2 个版本混淆了,这就是导致错误的原因。是吗?

4

1 回答 1

1

GHC 通常会假设导入应该从所有可用包的最新版本中提取。可能在新版本的容器中作为依赖项引入了一些东西。您所做的正确做法是取消注册。如果您不想这样做,您可以在ghc-pkg hide默认情况下阻止 ghc 使用它。

在任何情况下,典型的下一步将是找到迫使您拉出新容器的罪魁祸首包,并修改其阴谋集团以使用旧集装箱。

这是因为容器是一个非常依赖于依赖链的包,更新它通常会迫使您“重建世界”以使其他所有东西都使用更新的版本,这通常非常困难。

于 2013-02-07T16:27:59.800 回答