在ghci中为模块相关命令指定包名称

时间:2010-10-12 20:32:00

标签: haskell ghci

有没有办法为ghci(版本6.12.1)中的:browse:load:module命令指定模块的包名?

某些模块名称含糊不清:

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 个答案:

答案 0 :(得分:32)

据我所知,是的。但它不一定是大问题,你可以在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

答案 1 :(得分:15)

  

设置-hide-package选项是我唯一可以避免歧义的方法吗?

您可以使用ghc-pkg,例如

$ ghc-pkg hide monads-fd

这就像在每次后续-hide-package次调用上设置ghc一样。明确取决于monads-fd通过Cabal的包不会受到影响,但其他一切都会受到影响。小心!