8

test.hs には、次のものがあります。

doubleMe x = x + x

ghci で、次のように入力します。

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> 

なんで?直し方?

4

4 に答える 4

30

私の推測では、ソース ファイルで main 関数が定義されていると思います。

関数を定義した場合main、モジュールをロードして:l testも関数はインポートされませんが、main. その場合、モジュール名の前にアスタリスクを追加してロードできます: :l *test. その理由は、コンパイルされたバイナリが、エクスポートされていない最上位関数を隠してしまうからです。アスタリスクを先頭に付けると、GHCi はプリコンパイルされたモジュール (test) を無視し、代わりにソース ファイル (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

詳細については、次のリンクを確認してください。

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

于 2010-06-02T14:05:45.260 に答える
5
  1. ディレクトリから test.hi と test.o を削除してから、 を試してくださいghci test。[実行するghc file.hsと(実行しないとghc --make file.hs)、未定義の参照エラーが発生することがありますが、後で読み取られるようなファイルが作成されますghci。多分これはバグです。]

  2. 試す

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

    ghciで。結果は?

于 2010-06-01T17:41:18.197 に答える
4

正しい test.hs を読み込んでいますか? 間違ったディレクトリにいる可能性があります。または、doubleMe の定義を追加した後に test.hs を保存していない可能性があります。

于 2010-06-01T13:40:17.633 に答える
0

これは私にも起こりました - 他の誰かがそれに遭遇してこのページに出くわした場合に備えて、GHCI を実行していた VM のディスク容量が不足していて、毎回空のファイルをロードしようとすることが問題でした。

于 2013-01-25T20:52:36.957 に答える