Подтвердить что ты не робот

Control.Monad.State найден в нескольких пакетах haskell

Оценивая строку "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.

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

4b9b3361

Ответ 1

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

  • 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; иначе замените их.

Ответ 2

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