2011-07-07 23 views
26

Mi solicitud Haskell tiene la siguiente estructura de directorios:Haskell/GHCi - carga de módulos de diferentes directorios

src/ 
    utils/Utils.hs 
    subsystem/Subsystem.hs 

El Subsystem módulo importa Utils módulo. Me gustaría probar manualmente este código en GHCi.

El problema es GHCi parece ser sólo en busca de módulos disponibles en '.' (directorio actual), así que copiaron Utils.hs al subsistema carpeta y fue capaz de entregar la prueba Subsytem.hs. ¿Hay una mejor manera de hacer esto? Por ejemplo, me gustaría iniciar GHCi en el directorio src y dejarlo buscar módulos en los directorios ./utils y ./subsystem. ¿Puedo especificar una ruta de módulo a GHCi?

Respuesta

9

De forma predeterminada, cuando GHC busca módulos, interpreta Foo.Bar como Foo/Bar.hs. Por lo tanto, si tiene un solo proyecto, puede tener un módulo Utils como Utils.hs en el directorio de nivel superior y un módulo Utils.Fishcakes como Utils/Fishcakes.hs. Tenga en cuenta que Utils.hs puede existir junto con un directorio llamado Utils, o ambos pueden existir de forma independiente. Un estilo común tiende a ser el uso del módulo de nivel superior para simplemente reexportar elementos de los módulos que se encuentran debajo de él en la jerarquía, pero esto no es obligatorio. El GHC User Guide cubre el comportamiento anterior, así como también describe qué otras opciones son compatibles.

Hasta donde yo sé, en la mayoría de los casos el código usará la estructura predeterminada anterior, usará alguna otra estructura especificada como parte de una compilación cabal o esperará instalarse como una biblioteca.

+0

Gracias por la respuesta. Pude solucionar el problema haciendo lo siguiente: bajo src/create Utils y subsistemas que contienen los archivos Utils.hs y Subsystem.hs que contienen los Utils.Utils y Subsystem.Módulos de subsistema. Entonces puedo ejecutar GHCi desde src/y luego simplemente hacer: agregar Subsystem.Subsystem. – simon

7

Puede crear un archivo .ghci con algo como esto:

: set -isrc -iutils -isubsystem

3

Si proyecta tiene el siguiente ...

src/ 
    utils/Utils.hs 
    subsystem/Subsystem.hs 
..... 
myproject.cabal 
Setup.hs 

Usted puede crear un archivo .ghci en el directorio raíz del proyecto, el mismo directorio en el que están src, myproject.cabal y Setup.hs. El contenido de .gchi debe ser este ..

:set -isrc/utils -isrc/subsystem 

Ahora puede llamar a ghci desde el directorio raíz de su proyecto y cargará automáticamente cualquier módulo vinculado.

$ ghci 
GHCi, version 7.8.3: http://www.haskell.org/ghc/ :? for help 
Loading package ghc-prim ... linking ... done. 
Loading package integer-gmp ... linking ... done. 
Loading package base ... linking ... done. 
Prelude>:load src/subsystem/Subsystem.hs 
... should load Subsystem.hs 
Cuestiones relacionadas