В 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>
Почему? Как зафиксировать?
Вы уверены, что загружаете нужный test.hs? Возможно, вы не в том каталоге. Или, может быть, вы не сохранили test.hs после добавления определения doubleMe.
Я предполагаю, что вы определили главную функцию в исходном файле.
Если вы определили функцию 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-rating.html # ghci-scope
Удалите test.hi и test.o из каталога, а затем попробуйте ghci test
. [Иногда, когда я запускаю ghc file.hs
(а не ghc --make file.hs
), он выдает ошибку undefined reference error, но создает такие файлы, которые читаются ghci
позже. Возможно, это ошибка.]
Попробуйте
: cd "<путь к вашему файлу>"
: l тест
:просматривать
в ghci. Каков результат?