Control.Monad.State найден в нескольких пакетах haskell - PullRequest
21 голосов
/ 12 января 2010

При оценке строки «import Control.Monad.State» в модуле Haskell 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.

Как мне разрешить этот конфликт?

Ответы [ 2 ]

35 голосов
/ 12 января 2010

У вас есть несколько вариантов. Или:

  • 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.

Первый лучше всего подходит для случайного взлома, а последний лучше всего подходит для производственных сборок.

Все они предполагают, что вам нужен модуль mtl, а не модуль monads-fd; в противном случае меняйте их местами.

1 голос
/ 12 января 2010

Оба пакета реализуют Control.Monad.State, и GHC не знает, какую реализацию он предпочитает, поэтому вам нужно скрыть один из пакетов от GHC. Похоже, здесь вам может помочь флаг -ignore-package <name> GHC.

...