Возможно, вы уже скомпилировали модуль, чтобы в каталоге находились файлы .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>