2014-01-15 167 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 –