Управление. Монада. Состояние, найденное в нескольких пакетах haskell

В то время как оценка строки "импортирует Управление. Монада. Состояние" в модуле 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.

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

21
задан Don Stewart 18 April 2011 в 18:36
поделиться

2 ответа

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

  • ghc-pkg спрятать monads-fd. Это заставит GHC и GHCi игнорировать наличие monads-fd по умолчанию до тех пор, пока позже ghc-pkg не выставит monads-fd, но программное обеспечение, установленное компанией Cabal, все равно сможет строиться на его основе.
  • Используйте прагму {-# LANGUAGE PackageImports #-} и измените оператор импорта на импорт "mtl" Control.Monad.State.
  • Используйте Cabal для построения проекта и укажите mtl в строке Build-depends.

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

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

35
ответ дан 29 November 2019 в 20:55
поделиться

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

1
ответ дан 29 November 2019 в 20:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: