21

在评估 Haskell 模块中的“import Control.Monad.State”行时,GHC 给了我以下错误:

Could not find module `Control.Monad.State':
  it was found in multiple packages: monads-fd-0.0.0.1 mtl-1.1.0.2
Failed, modules loaded: none.

我该如何解决这个冲突?

4

2 回答 2

35

你有几个选择。任何一个:

  • ghc-pkg hide monads-fd. 这将导致 GHC 和 GHCimonads-fd默认忽略 的存在,直到您稍后ghc-pkg expose monads-fd,但 Cabal 安装的软件仍然能够针对它进行构建。
  • 使用{-# LANGUAGE PackageImports #-}编译指示,并将您的导入语句更改为import "mtl" Control.Monad.State.
  • 使用 Cabal 构建您的项目,并mtl在该Build-depends行中指定。

第一个最适合休闲黑客,最后一个最适合生产构建。

这些都假设您想要mtl模块而不是monads-fd模块;否则交换它们。

于 2010-01-12T12:53:57.377 回答
1

这两个包都实现了 Control.Monad.State 并且 GHC 不知道它应该更喜欢哪个实现,因此您需要对 GHC 隐藏其中一个包。似乎-ignore-package <name>GHC 标志在这里可能对您有所帮助。

于 2010-01-12T12:53:28.973 回答