Haskell 匹配2个Data.Map包版本
我导入包数据。映射如下:Haskell 匹配2个Data.Map包版本,haskell,Haskell,我导入包数据。映射如下:导入限定数据。映射为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
导入限定数据。映射为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))'
我仔细检查了包容器的版本,发现我安装了两个版本:
已安装的版本:0.4.2.1、0.5.1.0
所以,我猜,计算机被两个版本混淆了,这就是为什么会导致错误。是吗?GHC通常会假设导入应使用所有可用软件包的最新版本。很可能是新版本的容器中引入了某种依赖项。你所做的正确的事情就是注销它。如果您不想这样做,您可以使用
ghc pkg hide
来阻止ghc默认使用它
在任何情况下,典型的下一步是找到迫使你拉一个新集装箱的罪犯包裹,并修改其阴谋集团使用旧的
这是因为containers是一个位于依赖链最底层的包,更新它通常会迫使您“重建世界”,以使其他所有内容都使用较新的版本,这通常非常困难。GHC通常会假设导入应该使用所有可用包的最新版本。很可能是新版本的容器中引入了某种依赖项。你所做的正确的事情就是注销它。如果您不想这样做,您可以使用
ghc pkg hide
来阻止ghc默认使用它
在任何情况下,典型的下一步是找到迫使你拉一个新集装箱的罪犯包裹,并修改其阴谋集团使用旧的
这是因为containers是一个位于依赖链最底层的包,更新它通常会迫使您“重建世界”,以使其他所有内容都使用较新的版本,这通常非常困难。是的,这就是导致错误的原因,您是对的。真正的问题是为什么GHC同时加载到包的不同版本。如果你正确地完成了你的项目,这是不应该发生的。我想知道我们是否可以准确地导入包容器的版本-0.4.2.1,而不必与阴谋集团打交道。例如,
import qualified containers-0.4.2.1:Data.Map as M
I注销了containers 0.5.1.0的版本,幸运的是没有影响包依赖关系。编译也可以。但任何其他建议都是受欢迎的。感谢您可以使用GHC(和GHCi)标志-package containers-0.4.2.1
来使用早期版本,而无需卸载较新版本。这不会导致任何问题,除非您使用暴露Data.Map.Map的函数(不仅仅在内部使用),并且是针对不同版本的容器编译的,并且您应该能够使用选项\u GHC pragma在源文件中指定这一点。是的,这就是导致错误的原因,您是正确的。真正的问题是为什么GHC同时加载到包的不同版本。如果你正确地完成了你的项目,这是不应该发生的。我想知道我们是否可以准确地导入包容器的版本-0.4.2.1,而不必与阴谋集团打交道。例如,import qualified containers-0.4.2.1:Data.Map as M
I注销了containers 0.5.1.0的版本,幸运的是没有影响包依赖关系。编译也可以。但任何其他建议都是受欢迎的。感谢您可以使用GHC(和GHCi)标志-package containers-0.4.2.1
来使用早期版本,而无需卸载较新版本。这不会导致任何问题,除非您使用公开Data.Map.Map(不仅仅在内部使用)的函数,并且这些函数是针对不同版本的容器编译的,并且您应该能够使用选项\u GHC pragma在源文件中指定这一点。