Возможно, вы скомпилировали модуль до того, как в каталоге находятся файлы .o
и .hi
. Когда GHCi найдет это, он по умолчанию загрузит модуль в скомпилированный режим, что означает, что только материал, экспортируемый из модуля, находится в области видимости.
Если вы не указали объявление модуля, по умолчанию это будет только main
, так как объявление модуля по умолчанию - module Main (main) where
. Это также название Main
.
Вы можете сказать, что это происходит из подсказки. Как правило, при загрузке модуля будет выглядеть следующим образом:
Prelude> :load Foo.hs
[1 of 1] Compiling Main (Foo.hs, interpreted)
Ok, modules loaded: Main.
*Main>
Звездочка перед тем Main
означает, что модуль работает в режиме интерпретации, и что все, что в нем находится в области, в том числе вещи, импортируемой из других модулей. Однако, если бы я только что собрали Foo.hs
, а затем попытался загрузить его в GHCi, я бы вместо того, чтобы увидеть что-то вроде этого:
Prelude> :load Foo.hs
Ok, modules loaded: Main.
Prelude Main>
Вы можете принудительно истолковано режим предваряя имя файла со звездочкой:
Prelude> :load *Foo.hs
[1 of 1] Compiling Main (Foo.hs, interpreted)
Ok, modules loaded: Main.
*Main>
Можете ли вы показать первые несколько строк своего файла? В частности, декларация 'module', если она есть. – ehird
Файл компилируется отлично, и нет объявления модуля. Кажется, что он терпит неудачу, когда я нажимаю кнопку «Скомпилировать» в редакторе, а затем загружаю в ghci. – NoBugs
Если у вас нет объявления модуля, по умолчанию используется 'module Main (main) where', а при компиляции доступно только функция' main'. –