我收到此类错误:
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
谢谢。
答案 0 :(得分:2)
您遇到了 cabal hell 。
问题是安装了containers
个软件包的多个版本。这意味着Map
数据类型有两个版本,一个来自containers-0.5.0.0
,另一个来自另一个版本。这两个不匹配,这就是你得到错误的原因。
解决该问题的最简单方法是删除~/.ghc
(在unix上)目录并重建所有内容。但这不会保护你将来免受此类问题的影响,并且它也有可能根本不起作用。所以这不是一个好的解决方案。
如果您的cabal-install
至少为1.18版,则可以使用 cabal sandboxes 功能。这允许您为每个项目创建一个隔离的包环境,从而避免此类冲突。只需切换到您的项目并运行:
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创建和管理沙箱。