1

我收到这种类型的错误:

Couldn't match type `containers-0.5.0.0:Data.Map.Base.Map
                       ByteString [ByteString]'
              with `M.Map ByteString [ByteString]'
Expected type: M.Map ByteString [ByteString]
  Actual type: Params

但是 Params 类型是 Map ByteString [ByteString]

type Params = Map ByteString [ByteString]

如果有任何帮助,这是完整的功能:

import qualified Data.Map as M

categoryDoc :: Params -> Document
categoryDoc params = map (\(k,[v]) -> T.decodeUtf8 k =: T.decodeUtf8 v) $ M.toList params

谢谢你。

4

1 回答 1

2

你遇到了阴谋集团的地狱

问题是安装了多个版本的containers软件包。这意味着Map数据类型有两个版本,一个containers-0.5.0.0来自另一个版本,一个来自另一个版本。这两个不匹配,这就是你得到错误的原因。


该问题的最简单解决方案是删除~/.ghc(在 unix 上)目录并重建所有内容。但这不会保护您将来免受此类问题的影响,而且它也有可能根本不起作用。所以这不是一个好的解决方案。

如果您cabal-install至少拥有 1.18 版本,则可以使用cabal 沙盒功能。这允许您为每个项目创建一个隔离的包环境,从而避免此类冲突。只需切换到您的项目并运行:

cabal sandbox init                        # Create a new sandbox
cabal install --only-dependencies         # Install dependencies
cabal build                               # Build your project

您还可以使用cabal install将您的项目安装到沙箱中或cabal repl使用适合您项目的正确设置启动 GHCi。

如果您没有足够新的 cabal-install 版本并且无法升级,您可以使用cabal-dev创建和管理沙箱。

于 2013-10-21T14:06:57.313 回答