2010-06-01 16 views
6

En test.hs, que tengo:ghci no cargar la función de archivo

doubleMe x = x + x 

En ghci, I Tipo:

Prelude> :l test 
[1 of 1] Compiling Main    (test.hs, interpreted) 
Ok, modules loaded: Main. 
*Main> doubleMe 9 

<interactive>:1:0: Not in scope: `doubleMe' 
*Main> 

¿Por qué? ¿Como arreglar?

Respuesta

4

¿Estás seguro de que estás cargando el test.hs correcto? Tal vez estás en el directorio equivocado. O tal vez no guardó test.hs después de agregar la definición de doubleMe.

+2

Había creado una carpeta en el escritorio en lugar de un acceso directo a una carpeta. –

5
  1. Quitar test.hi y test.o del directorio y luego tratar ghci test. [A veces, cuando ejecuto ghc file.hs (y no ghc --make file.hs), se obtiene un error de referencia no definido, pero crea los archivos que se leen ghci más tarde. Tal vez esto es un error.]

  2. Trate

    :cd "<path to your file>" 
    :l test 
    :browse 
    

    en ghci. Cual es el resultado?

+0

En OS X 10.11.6 y GHCI 8.2.2 no tiene que usar comillas dobles en ''. Puede intentar ': cd '. – Elmex80s

29

Supongo que ha definido una función principal en su archivo fuente.

Si ha definido una función main, cargar el módulo con :l test no importará ninguna función excepto main. En ese caso, puede cargarlo anteponiendo un asterisco al nombre del módulo: :l *test. La razón es que el binario compilado ocultará las funciones de nivel superior no exportadas. El anteponer un asterisco fuerza a GHCi a ignorar el módulo precompilado (prueba) e interpretar el archivo fuente en su lugar (test.hs).

[jkramer/sgi5k:.../haskell]# cat test.hs 

main = do 
    print $ doubleMe 2 

doubleMe x = x + x 

[jkramer/sgi5k:.../haskell]# ghc --make test 
[jkramer/sgi5k:.../haskell]# ghci 
[...some messages...] 
>> :l test 
Ok, modules loaded: Main. 
>> :t doubleMe 

<interactive>:1:0: Not in scope: `doubleMe' 
>> :l *test 
[1 of 1] Compiling Main    (test.hs, interpreted) 
Ok, modules loaded: Main. 
>> :t doubleMe 
doubleMe :: (Num a) => a -> a 

comprobar estos enlaces para más información:

http://www.haskell.org/ghc/docs/6.12.2/html/users_guide/ghci-compiled.html http://www.haskell.org/ghc/docs/6.12.2/html/users_guide/interactive-evaluation.html#ghci-scope

+3

Este no fue el problema de la operación, pero corrigió mi problema. Gracias por el truco * module_name. – Saterus

+0

Esto no funciona para mí. En primer lugar, después de cargar la prueba, el mensaje se verá como * Principal>, en lugar de >>. También recibo un mensaje de error que me dice : No se pudo encontrar el módulo '* fadetoblack ': Use -v para ver una lista de los archivos buscados. –

0

Esto sucedió a mí, también - y en el caso de cualquier otra persona se encuentra con ella y se tropieza a través de esta página, mi problema era que la máquina virtual en la que estaba ejecutando GHCI no tenía espacio en el disco, lo que provocó que intentara cargar un archivo vacío cada vez.

Cuestiones relacionadas