匹配2个Data.Map包版本

时间:2012-11-29 18:16:29

标签: haskell

我导入包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个版本相混淆,这就是导致错误的原因。是吗?

1 个答案:

答案 0 :(得分:1)

GHC通常会假定导入应从可用的所有软件包的最新版本中提取。可能在新版本的容器中作为依赖项被拉出来。你所做的正确的事情就是取消注册。如果你不想这样做,你可以使用ghc-pkg hide来保持ghc默认使用它。

在任何情况下,典型的下一步都是找到迫使你拉新容器的罪魁祸首包,并修改它的阴谋以使用较旧的容器。

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