2010-01-12 156 views
21

雖然哈斯克爾模塊評估行「進口Control.Monad.State」,GHC給了我以下錯誤:Control.Monad.State哈斯克爾

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. 

如何解決這個矛盾?

回答

35

你有幾個選擇。可以是:

  • ghc-pkg hide monads-fd。這會導致GHC和GHCi在默認情況下忽略monads-fd的存在,直到您稍後ghc-pkg expose monads-fd,但由Cabal安裝的軟件仍然能夠構建它。
  • 使用{-# LANGUAGE PackageImports #-}編譯指示,並將您的導入語句更改爲import "mtl" Control.Monad.State
  • 用驚天動地來構建你的項目,並在Build-depends行指定mtl

第一個是最好的休閒黑客,最後是最好的生產建設。

這些都假設你想要mtl模塊而不是monads-fd模塊;否則交換它們。

+0

感謝這個答案,我得到了一個徹頭徹尾的陰謀構建了同樣的問題,我不知道該怎麼辦。 – 2010-01-12 13:00:11

1

這兩個軟件包都實現了Control.Monad.State,GHC並不知道它應該選擇哪個實現,所以你需要隱藏GHC中的一個軟件包。看起來像-ignore-package <name> GHC標誌可能會幫助你在這裏。