Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 匹配2个Data.Map包版本_Haskell - Fatal编程技术网

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在源文件中指定这一点。