22

有没有办法为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选项是我唯一能避免歧义的方法吗?

4

2 回答 2

33

据我所知,是的。但这不一定是什么大问题,你可以在 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
于 2010-10-12T20:42:40.993 回答
15

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

您可以使用ghc-pkg,例如

$ ghc-pkg hide monads-fd

这就像-hide-package每个后续ghc调用进行设置。明确依赖monads-fdvia Cabal 的软件包不会受到影响,但其他一切都会受到影响。小心!

于 2010-10-12T20:48:33.553 回答