Question

I get this type error:

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

But Params type is Map ByteString [ByteString]

type Params = Map ByteString [ByteString]

If it is of any help, this is the full function:

import qualified Data.Map as M

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

Thank you.

Was it helpful?

Solution

You have encountered cabal hell.

The problem is that there are multiple versions of the containers package installed. This means that there are two versions of the Map data type, one from containers-0.5.0.0 and one from the other version. Those two won't match, and that's why you get the error.


The easiest solution to that problem is to delete the ~/.ghc (on unix) directory and rebuilt everything. But that won't protect you from such problems in future, and there is also a chance that it won't work at all. So this is not a good solution.

If you have cabal-install of at least version 1.18, you can use the cabal sandboxes feature. This allows you to create an isolated package environment for each project, and thus avoid such conflicts. Just switch to your project and run:

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

You can also use cabal install to install your project into the sandbox or cabal repl to start GHCi with the right settings for your project.

If you do not have a new-enough version of cabal-install and can't upgrade, you can use cabal-dev to create and manage sandboxes.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top