在多个包haskell中找到Control.Monad.State

时间:2010-01-12 12:44:33

标签: haskell cabal hackage

在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.

如何解决此冲突?

2 个答案:

答案 0 :(得分:35)

您有几种选择。之一:

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

第一个最适合随意黑客攻击,最后一个最适合生产构建。

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

答案 1 :(得分:1)

两个包都实现了Control.Monad.State,而GHC不知道它应该选择哪个实现,因此你需要隐藏GHC中的一个包。好像-ignore-package <name> GHC标志可能对你有帮助。