Take the 2-minute tour ×

Today when I tried to compile my code in Geany I got this error

Could not find module `Control.Monad.Reader':
  it was found in multiple packages: monads-fd- mtl-
Compilation failed.

I get the same for the Writer monad; I thought I should remove one of those packages, but I do not want to break other packages, so now what should I do, yesterday everything worked without any problem.

share|improve this question
I found it, it's right here! Oh wait, that's not what you meant... –  C. A. McCann Aug 13 '10 at 13:38
add comment

2 Answers

It looks like you have recently installed monads-fd, perhaps as a dependency of something else you installed. Both monads-fd and mtl packages contain the module Control.Monad.Reader, so GHC doesn't know which one to use when you compile some code that imports it. You need to resolve the ambiguity somehow:

  • If you are using GHC or GHCi directly
    • either use a -hide-package <package> flag on the command line to hide one of the packages, or
    • hide the package by default using ghc-pkg hide <package>. You may need to use ghc-pkg --user hide <package> if the package was installed in your home directory (the default on some platforms).
  • You can use Cabal, and say exactly which one of the conflicting packages you depend on using the build-depends field in your .cabal file
share|improve this answer
An addendum: Cabal takes care of itself, so using ghc-pkg hide won't affect it. In other words, you won't break cabal install that way, which worried me the first time I saw the "just hide the package" advice. By the way--it's great to have you with us on SO, Simon! –  C. A. McCann Aug 13 '10 at 13:37
add comment

I encountered a similar problem recently, and it was suggested that I run ghc-pkg hide {x} where '{x}' is the name of one of those packages. It worked in my situation.

share|improve this answer
add comment

Your Answer


