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> 

Почему? Как зафиксировать?

6
задан sdcvvc 1 June 2010 в 20:56
поделиться

3 ответа

Вы уверены, что загружаете нужный test.hs? Возможно, вы не в том каталоге. Или, может быть, вы не сохранили test.hs после добавления определения doubleMe.

4
ответ дан 8 December 2019 в 02:24
поделиться

Я предполагаю, что вы определили главную функцию в исходном файле.

Если вы определили функцию 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

29
ответ дан 8 December 2019 в 02:24
поделиться
  1. Удалите test.hi и test.o из каталога, а затем попробуйте ghci test . [Иногда, когда я запускаю ghc file.hs (а не ghc --make file.hs ), он выдает ошибку undefined reference error, но создает такие файлы, которые читаются ghci позже. Возможно, это ошибка.]

  2. Попробуйте

    : cd "<путь к вашему файлу>"
    : l тест
    :просматривать
    

    в ghci. Каков результат?

5
ответ дан 8 December 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: