Я предполагаю, что вы определили главную функцию в вашем исходном файле.
Если вы определили функцию 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