我导入包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个版本相混淆,这就是导致错误的原因。是吗?
答案 0 :(得分:1)
GHC通常会假定导入应从可用的所有软件包的最新版本中提取。可能在新版本的容器中作为依赖项被拉出来。你所做的正确的事情就是取消注册。如果你不想这样做,你可以使用ghc-pkg hide
来保持ghc默认使用它。
在任何情况下,典型的下一步都是找到迫使你拉新容器的罪魁祸首包,并修改它的阴谋以使用较旧的容器。
这是因为容器是依赖链中非常远的包,并且更新它通常会迫使您“重建世界”以使其他所有内容都使用更新的版本,这通常非常困难。