2010-08-13 30 views
3

今天,当我尝试编译我的代码在Geany我得到这个错误找不到模块`Control.Monad.Reader”

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

我得到了作家单子一样的;我想我应该删除其中一个包,但我不想破坏其他包,所以现在我该怎么办,昨天一切正常,没有任何问题。

+0

我发现它的存在冲突的包之一,它的[这里](HTTP:// themonadreader.wordpress.com/)!哦,等等,这不是你的意思... – 2010-08-13 13:38:44

回答

1

我最近遇到类似的问题,有人建议我运行ghc-pkg hide {x},其中'{x}'是其中一个包的名称。它符合我的情况。

6

它看起来像你最近安装monads-fd,也许作为您安装的其他东西的依赖。 monads-fdmtl包都包含模块Control.Monad.Reader,所以GHC在编译某些导入它的代码时不知道使用哪一个。你需要以某种方式解决歧义:

  • 如果您正在使用GHC或GHCI直接
    • 要么使用-hide-package <package>标志在命令行中隐藏的包之一,或
    • 隐藏包默认使用ghc-pkg hide <package>。如果软件包安装在您的主目录中(某些平台上为默认),则可能需要使用ghc-pkg --user hide <package>
  • 你可以用惊天动地,并准确地说,你依赖于使用build-depends场在.cabal文件
+1

附录:Cabal自己照顾自己,所以使用'ghc-pkg hide'不会影响它。换句话说,你不会以这种方式破坏'cabal install',这让我担心我第一次看到“只是隐藏包装”的建议。顺便说一句 - 很高兴有你跟我们在一起,西蒙! – 2010-08-13 13:37:48