tags:

views:

77

answers:

2

Is there a way to specify the package name for a module for the :browse, :load or :module commands in ghci (version 6.12.1) ?

Some module names are ambiguous:

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

Is setting the -hide-package option the only thing I can do to avoid the ambiguity?

+8  A: 

As far as I know, yes. But it doesn't have to be a big deal, you can do this inside 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> 

There was also a line-item on GHC-7 change log that made me think package imports would work on the command line, but it doesn't seem to yet (see below). The change comment said something like "full import syntax supported in GHCi", which must exclude extensions I suppose.

$ 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
TomMD
+2  A: 

Is setting the -hide-package option the only thing I can do to avoid the ambiguity?

You can use ghc-pkg, e.g.

$ ghc-pkg hide monads-fd

This is like setting -hide-package on every subsequent ghc invocation. Packages explicitly depending on monads-fd via Cabal will not be affected, but everything else is. Watch out!

keegan