6

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

import Control.Monad.Writer

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

这里有一个类似问题的问题和解决方法。

尽管在这个线程中给出了解决方案,但我的问题是:
这是 cabal 和 ghc 的标准配置吗?
- 如果是这样:模块是否有理由默认包含在两个包中?
- 如果没有:(可能)发生了什么,可以撤消吗?

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

提前谢谢了!

4

1 回答 1

6

是的,这是“标准”。原因是对mtl包的历史性重构,以适应处理具有多个参数的类型类的两种不同风格,例如MonadWriter类:类型族功能依赖项。

mtl包保留了较旧的功能依赖关系方法,而monads-tf具有较新的类型族方法。

由于 Haskell 生态系统中现在有一些库使用monads-tf. ,因此在典型安装中两者都不可避免地会出现在包数据库中——我个人已经体验了好几个星期了。

于 2014-01-15T18:07:16.513 回答