2014-01-15 166 views
6

我试图导入Control.Monad.Writer模块是这样的: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 

有一个问题与类似的问题和解决方法here

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

如果这个问题:我正在研究Debian 7.3 wheezy并安装了haskell-platform包。此外,我使用cabal install安装了一些软件包。

非常感谢提前!

回答

6

是的,这是“标准”。原因在于对mtl包进行了历史性重构,以容纳具有多个参数的两种不同类型的处理类型类,如MonadWriter类:type familiesfunctional dependencies

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

由于现在Haskell生态系统中存在使用monads-tf的库,所以它们都不可避免地会出现在典型安装的包数据库中 - 我个人经历了几个星期。

+1

您是否在使用'monads-tf'发现新软件包?我认为它受到'mtl'的普及影响而被否决了。你能用“PackageImports”解决问题吗? –

+1

我大部分都是用ghci打这个。正如链接的答案所示,在cabal包中,您只需选择依赖哪个。我实际上并没有追踪到monads-tf中的内容,我只知道我拥有它:-) –

+1

从http://packdeps.haskellers.com/reverse/monads-tf,我怀疑'MonadCatchIO-transformers'是间接原因:http://packdeps.haskellers.com/reverse/MonadCatchIO-transformers –