问题
In test.hs, I have:
doubleMe x = x + x
In ghci, I type:
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>
Why? How to fix?
回答1:
Are you sure that you're loading the right test.hs? Maybe you're in the wrong directory. Or maybe you didn't save test.hs after adding the definition of doubleMe.
回答2:
My guess is that you have defined a main function in your source file.
If you have defined a main
function, loading the module with :l test
won't import any functions but main
. In that case you can load it by prepending an asterix to the module name: :l *test
.
The reason is that the compiled binary will hide non-exported top-level functions. Prepending an asterix forces GHCi to ignore the precompiled module (test) and interprete the source file instead (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
Check these links for further information:
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:
Remove test.hi and test.o from the directory and then try
ghci test
. [Sometimes when I runghc file.hs
(and notghc --make file.hs
) it gives undefined reference error, but creates such files that are read byghci
later. Maybe this is a bug.]Try
:cd "<path to your file>" :l test :browse
in ghci. What is the result?
回答4:
This happened to me, too - and in case anyone else runs into it and stumbles across this page, my issue was that the VM I was running GHCI in was out of disk space - prompting it to try and load an empty file each time.
来源:https://stackoverflow.com/questions/2950185/ghci-not-loading-function-from-file