2010-10-12 15 views
22

¿Hay alguna manera de especificar el nombre del paquete para un módulo para los comandos :browse, :load o :module en ghci (versión 6.12.1)?Especificación del nombre del paquete para comandos relacionados con módulos en ghci

Algunos nombres de los módulos son ambiguos:

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 

está estableciendo la opción -hide-package la única cosa que puedo hacer para evitar la ambigüedad?

Respuesta

31

Por lo que yo sé, sí. Pero no tiene que ser un gran problema, usted puede hacer esto en el interior 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> 

Hubo también una línea de pedido del GHC-7 registro de cambios que me hizo pensar importaciones de paquetes trabajarían en el comando línea, pero todavía no parece (ver más abajo). El comentario de cambio decía algo así como "sintaxis de importación completa admitida en GHCi", que debe excluir extensiones, supongo.

$ 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

Y parece que GHCi 7.0.1 acepta la línea de importación del paquete que se muestra como incorrecta en 7.0.0.20100924. –

15

está estableciendo la opción -hide-package la única cosa que puedo hacer para evitar la ambigüedad?

Puede usar ghc-pkg, p. Ej.

$ ghc-pkg hide monads-fd 

Esto es como poner -hide-package en cada posterior ghc invocación. Los paquetes que dependen explícitamente de monads-fd a través de Cabal no se verán afectados, pero todo lo demás sí lo está. ¡Cuidado!

Cuestiones relacionadas