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

jul*_*les 6 haskell ghc cabal hackage

我试着Control.Monad.Writer像这样导入模块:

import Control.Monad.Writer
Run Code Online (Sandbox Code Playgroud)

ghc 版本7.4.1给出以下错误:

Ambiguous module name `Control.Monad.Writer':
      it was found in multiple packages: monads-tf-0.1.0.1 mtl-2.1.1
Run Code Online (Sandbox Code Playgroud)

有类似的问题和解决方法问题在这里.

尽管在这个帖子中给出了解决方案,但我的问题是:
这是cabal和ghc的标准配置吗?
- 如果是这样的话:默认情况下模块是否有两个包的原因?
- 如果不是:发生了什么(可能有)并且可以撤消?

如果这很重要:我正在使用Debian 7.3 wheezy并安装了haskell-platform软件包.此外,我使用安装了一些包cabal install.

提前谢谢了!

GS *_*ica 6

是的,这是"标准".原因是mtl包的历史重构,以容纳具有多个参数的两种不同样式的处理类型类,如MonadWriter类:类型族函数依赖项.

mtl软件包保留了较旧的功能依赖方法,而monads-tf具有较新的类型系列方法.

由于现在Haskell生态系统中存在使用的库monads-tf,因此不可避免的是两者都会在典型安装的数据库数据库中结束 - 我个人经历了几个星期.

  • iirc,你可以使用`ghc-pkg hide monads-tf`来使mtl成为默认值.这不会影响cabal包,只会影响ghci/ghc. (5认同)