Указание имени пакета для команд, связанных с модулем, в GHCI
Вопрос
Есть ли способ указать имя пакета для модуля для :browse
, :load
или :module
Команды в GHCI (версия 6.12.1)?
Некоторые имена модулей неоднозначны:
Prelude> :module Control.Monad.Cont
<no location info>:
Ambiguous module name `Control.Monad.Cont':
it was found in multiple packages: mtl-1.1.0.2 monads-fd-0.1.0.2
Устанавливает -hide-package
Вариант Единственное, что я могу сделать, чтобы избежать двусмысленности?
Решение
Насколько я знаю, да. Но это не должно иметь большого значения, вы можете сделать это внутри GHCI:
Prelude Data.List> :set -hide-package mtl
package flags have changed, resetting and loading new packages...
Prelude> import Control.Monad.Cont
Prelude Control.Monad.Cont>
Был также линейный элемент в журнале изменений GHC-7, который заставил меня думать, что импорт пакета будет работать на командной строке, но, похоже, еще не (см. Ниже). В комментарии изменения говорится, что «полный синтаксис импорта, поддерживаемый в GHCI», который, как я полагаю, должен исключить расширения.
$ ghci-7.0.0.20100924 -XPackageImports
GHCi, version 7.0.0.20100924: http://www.haskell.org/ghc/ :? for help
...
Prelude Data.List> import "mtl" Control.Monad.Cont
<no location info>:
Ambiguous module name `Control.Monad.Cont':
it was found in multiple packages: mtl-1.1.1.0 monads-fd-0.1.0.2
Другие советы
Устанавливает
-hide-package
Вариант Единственное, что я могу сделать, чтобы избежать двусмысленности?
Ты можешь использовать ghc-pkg
, например
$ ghc-pkg hide monads-fd
Это как настройка -hide-package
на каждый последующий ghc
вызов. Пакеты явно в зависимости от monads-fd
через Cabal не будет затронут, но все остальное. Осторожно!