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

Я попытался импортировать модуль Control.Monad.Writer следующим образом:

import Control.Monad.Writer

ghc версии 7.4.1 выдает следующую ошибку:

Ambiguous module name `Control.Monad.Writer':
      it was found in multiple packages: monads-tf-0.1.0.1 mtl-2.1.1

Есть вопрос с похожей проблемой и обходной путь здесь .

Несмотря на решение, данное в этой теме, у меня есть вопросы:
Является ли это стандартной конфигурацией cabal и ghc?
- Если да: есть ли причина, по которой модуль должен быть в двух пакетах по умолчанию?< /em>
– Если нет: что (могло) произойти и можно ли это отменить?

Если это важно: я работаю над Debian 7.3 wheezy и установил пакет haskell-platform. Далее я установил некоторые пакеты, используя cabal install.

Спасибо заранее!


person jules    schedule 15.01.2014    source источник


Ответы (1)


Да, это "стандарт". Причина заключается в историческом рефакторинге пакета mtl, чтобы приспособить два разных стиля обработки классов типов с несколькими параметрами, такими как < класс href="http://hackage.haskell.org/package/mtl-2.0.1.0/docs/Control-Monad-Writer-Class.html">MonadWriter: семейства типов и функциональные зависимости.

Пакет mtl сохраняет старый подход к функциональным зависимостям, тогда как monads-tf использует более новый подход к семействам типов.

Поскольку сейчас в экосистеме Haskell есть библиотеки, использующие monads-tf, неизбежно, что обе они окажутся в базе данных пакетов при типичных установках — лично я сталкивался с этим в течение нескольких недель.

person GS - Apologise to Monica    schedule 15.01.2014
comment
Вы находите новые пакеты, написанные с помощью monads-tf? Я думал, что это фактически устарело из-за популярности mtl. Вы можете решить проблему с PackageImports? - person J. Abrahamson; 15.01.2014
comment
Я ударил это в основном в ghci. Как показывают связанные ответы, в пакетах клики вам просто нужно выбрать, от чего зависеть. На самом деле я не отслеживал, что именно в monads-tf, я просто знаю, что он у меня есть :-) - person GS - Apologise to Monica; 15.01.2014
comment
Из packdeps.haskellers.com/reverse/monads-tf я подозреваю, что MonadCatchIO-transformers косвенная причина: packdeps.haskellers.com/reverse/MonadCatchIO-transformers - person GS - Apologise to Monica; 15.01.2014
comment
iirc, вы можете использовать ghc-pkg hide monads-tf, чтобы сделать mtl по умолчанию. Это не повлияет на пакеты клики, только на ghci/ghc. - person bennofs; 15.01.2014