Haskell:如何解决可能的版本冲突?

时间:2012-08-14 17:54:21

标签: haskell

我可能在依赖问题上遇到了一些麻烦,但并不完全确定。这是我的问题。我正在使用Data.Bson库,并将一些(文本,文本)元组转换为bson字段,当我定义此函数时:

typeMismatch :: (Text, Text) -> Field
typeMismatch tp = (fst tp) := (String (snd tp))
抱怨道:

Couldn't match expected type `Label' with actual type `Text'
Expected type: (Label, b0)
  Actual type: (Text, Text)

Field基本上只是Bson中的一个键/值,其中键为Label,定义为Text的同义词,值为ValueString是其众多构造函数之一(即,这不是Prelude.String)。现在我尝试将第一个文本更改为标签:

typeMismatch :: (Label, Text) -> Field
typeMismatch tp = (fst tp) := (String (snd tp))

所以标签匹配,虽然这不是我想要的,我只是这样做进行调查,但它仍然抱怨:

Couldn't match expected type `text-0.11.2.0:Data.Text.Internal.Text'
            with actual type `Text'
Expected type: (Label, text-0.11.2.0:Data.Text.Internal.Text)
  Actual type: (Label, Text)

看起来我有一些依赖性问题或模块导入问题。但是我检查了我的库,看起来bson使用text-0.11.2.0而data.text也只是text-0.11.2.0,所以一切都应该是一致的。

如何解决此问题?提前谢谢。

编辑:解决了。通过添加“-v”标志来检查编译时的依赖关系。由于某种原因,还有文字-0.11.2.2潜伏在某处。 ghc-pkg取消注册该包并进行编译。从现在开始,我需要开始学习如何避免“哈斯克尔依赖地狱”。

2 个答案:

答案 0 :(得分:2)

在大多数情况下,您可以使用cabal-dev避免依赖地狱,并在.cabal文件中指定包版本。

答案 1 :(得分:1)

https://github.com/Paczesiowa/hsenv也是另一种选择。我觉得它比cabal-dev透明一点,如果你使用了rvm或virtualenv,你就已经知道如何使用它了。