Указание имени пакета для связанных с модулем команд в ghci - PullRequest
22 голосов
/ 13 октября 2010

Есть ли способ указать имя пакета для модуля для команд :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 единственной вещью, которую я могу сделать, чтобы избежать двусмысленности?

Ответы [ 2 ]

32 голосов
/ 13 октября 2010

Насколько я знаю, да.Но это не должно быть большим делом, вы можете сделать это внутри 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
15 голосов
/ 13 октября 2010

Является ли настройка параметра -hide-package единственной вещью, которую я могу сделать, чтобы избежать неоднозначности?

Вы можете использовать ghc-pkg, например,

$ ghc-pkg hide monads-fd

Это похоже на установку -hide-package на каждый последующий ghc вызов.Пакеты, явно зависящие от monads-fd через Cabal, не будут затронуты, но все остальное есть.Берегись!

...