开发者

ghci not loading function from file

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.
*Mai开发者_开发百科n> doubleMe 9

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

Why? How to fix?


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


  1. Remove test.hi and test.o from the directory and then try ghci test. [Sometimes when I run ghc file.hs (and not ghc --make file.hs) it gives undefined reference error, but creates such files that are read by ghci later. Maybe this is a bug.]

  2. Try

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

    in ghci. What is the result?


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.


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜