私の推測では、ソース ファイルで 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