2012-01-19 6 views
5

Creé algunos archivos de un proyecto en Unix, son muchos y si quiero ejecutarlos en otra PC o carpeta, necesito copiar todos los archivos allí. Están todos conectados en import. ¿Cómo puedo hacer un programa haskell ejecutable?Compilar archivos .hs múltiples de Haskell - Unix

que tienen por ejemplo:

main.hs - main where all the program executes; using,besides haskell, unix shell. 
ex1.hs - basically types of data, some functions. 
ex2.lhs - same as ex1.lhs but is literate with LaTeX 
pic.jpg - picture to use on the pdflatex 
package.sty - package needed to use some functions 

¿Cómo procedo y compilar todos estos? He intentado utilizar GHC pero siempre produce errores:

>ghc -o MAIN main.hs ex1.hs ex2.lhs pic.jpg package.sty 

Failed to load interface for 'ex1.hs' y está en la línea que tiene ex1.hs importación

curioso es que si opero ex1.hs importación aimportación ex2.lhs línea dará error en ex2

+1

¿Quisces decir _ghc_? –

+1

¿Cómo quieres que se compile un archivo '.jpg'- o' .sty'? ¿Debería estar incrustado en el ejecutable? – dflemstr

+0

Sí, lo necesito porque el programa crea un pdf y necesito ese jpg y sty es un paquete – MrFabio

Respuesta

9
  1. nombres de los módulos de Haskell deben comenzar con una letra mayúscula, por lo que empezar cambiando el nombre de ex1.hs y ex2.hs a Ex1.hs y Ex2.hs . También deberían comenzar con module Ex1 where, de lo contrario, el nombre del módulo predeterminado será Main, y GHC estará muy confundido cuando los nombres de los módulos no coincidan con los nombres de los archivos.

  2. Las declaraciones de importación deben hacer referencia al nombre del módulo, no al nombre del archivo, por lo tanto, cámbielas en main.hs para que correspondan con los nombres de los módulos.

    import Ex1 
    import Ex2 
    
  3. Ahora compila con ghc --make main.hs, y debe encontrar a los otros módulos de forma automática. Buscará módulos con extensiones .hs y .lhs, y las tratará correctamente como archivos Haskell alfabetizados.

Para proyectos más grandes, usted debe buscar en el uso de Cabal, el sistema de construcción utilizado por la mayoría de las bibliotecas y los programas de Haskell. Ayudará a gestionar las dependencias y las opciones del compilador, algo así como un Makefile.

+0

Estaba bien con los nombres, usando ese _ghc --make main.hs_ funciona pero hace archivos .o y la imagen no está compilada. Entonces, ¿cómo puedo ejecutarlo? causa _./main.o_ o _./main_ no funcionará – MrFabio

+0

@GoodGuyGreg: suponiendo que la compilación tuvo éxito, './main' debería funcionar. Estoy confundido sobre la compilación de la parte de la imagen. ¿Estás hablando de compilación LaTeX? – hammar

+0

Sí, compila un pdf en una función, pero si es imposible compilar un jpg puedo eliminarlo sin problema, pero el problema es que cuando compilo, hago archivos .o a cada .hs y .lhs importados en main. hs y ./main dice que no existe – MrFabio

3

Probar

ghc --make main.hs

que debe hacer GHC tratar de hacer todo lo posible ...

Cuestiones relacionadas