【发布时间】:2012-11-29 18:16:29
【问题描述】:
我像这样导入包 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 个版本混淆,这就是导致错误的原因。是吗?
【问题讨论】:
-
是的,这就是导致错误的原因,你说得对。真正的问题是为什么 GHC 会同时加载到不同版本的包。如果您正确地cabalise 您的项目,则永远不会发生这种情况。
-
我想知道我们是否可以在不使用 cabal 处理的情况下准确导入包 container-0.4.2.1 的版本。例如,
import qualified containers-0.4.2.1:Data.Map as M -
我注销了容器 0.5.1.0 的版本,很幸运没有包依赖受到影响。而且编译没问题。但欢迎任何其他建议。谢谢
-
您可以使用 GHC(和 GHCi)标志
-package containers-0.4.2.1来使用早期版本,而无需卸载较新版本。除非您使用公开 Data.Map.Map 的函数(不仅仅是在内部使用它)并且针对不同版本的容器编译,否则这不会导致任何问题,并且您应该能够使用 OPTIONS_GHC pragma 在源代码中指定它文件。
标签: haskell