21

Haskell モジュールの "import Control.Monad.State" 行を評価しているときに、GHC で次のエラーが表示されます。

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.

この競合を解決するにはどうすればよいですか?

4

2 に答える 2

35

いくつかのオプションがあります。また:

  • ghc-pkg hide monads-fd。これにより、GHCとGHCiは、monads-fd後で使用するまでデフォルトでの存在を無視しますghc-pkg expose monads-fdが、Cabalによってインストールされたソフトウェアはそれに対してビルドできます。
  • プラグマを使用して{-# LANGUAGE PackageImports #-}、インポートステートメントをに変更しますimport "mtl" Control.Monad.State
  • Cabalを使用してプロジェクトをビルドmtlし、Build-depends行で指定します。

1つ目はカジュアルなハッキングに最適で、最後の1つはプロダクションビルドに最適です。

これらはすべて、mtlモジュールではなくモジュールが必要であることを前提としていmonads-fdます。それ以外の場合は交換してください。

于 2010-01-12T12:53:57.377 に答える
1

どちらのパッケージも Control.Monad.State を実装しており、GHC はどちらの実装を優先すべきかを認識していないため、パッケージの 1 つを GHC から非表示にする必要があります。-ignore-package <name>GHCフラグがここで役立つようです。

于 2010-01-12T12:53:28.973 に答える