GHCI не загружается функция из файла
Вопрос
В 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 после добавления определения дублемы.
Другие советы
Я предполагаю, что вы определили основную функцию в исходном файле.
Если вы определили main
Функция, загрузка модуля с :l test
не будет импортировать никаких функций, но main
. Отказ В этом случае вы можете загрузить его, добавив Asterix к имени модуля: :l *test
Отказ Причина в том, что скомпилированная бинар будет скрывать не экспортируемые функции верхнего уровня. Подготовка Asterix заставляет GHCI игнорировать предварительнокомдационный модуль (тест) и вместо этого интерпретирую исходный файл (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
Удалить test.hi и test.o из каталога, а затем попробуйте
ghci test
. Отказ [Иногда, когда я бегуghc file.hs
(и неghc --make file.hs
) дает неопределенную ссылочную ошибку, но создает такие файлы, которые читаютсяghci
позже. Может быть, это ошибка.Пытаться
:cd "<path to your file>" :l test :browse
в ГХCИ. Что в итоге?
Это произошло со мной тоже - и если кто-то еще бежит в него и спотыкается через эту страницу, моя проблема заключалась в том, что VM я работал GHCI, был вне дискового пространства - побуждая его попробовать и загрузить пустой файл каждый раз.