Существуют две различные концепции на работе здесь: цель установить контекст и оценки
Вы работаете с целью установить с :add
, :load
и :reload
, и вы работаете с контекстом оценки. с :module
и .
Целевой набор - это список локально доступных модулей, которые ghci читает и компилирует. Обычно вы должны использовать это, чтобы указать источник, над которым работаете. ghci lo lo ad и скомпилировать каждый из этих модулей и любые необходимые ему зависимости.
Вы используете :load
для сброса целевого набора точно в заданный набор модулей и :add
для добавления данных модулей в существующий целевой набор.
Если вы задаете модули в целевом наборе с *
, они всегда будут «интерпретироваться байт-кодом» - это означает, что они загружаются быстро, но не работают так быстро, как скомпилированный код, иначе ghci будет использовать скомпилированный объектный файл, если доступный и байт-код интерпретировать, если нет.
:reload
самостоятельно перезагружает весь целевой набор и зависимости. Я не совсем уверен, что делает :reload <mod>
, но я думаю, что он перезагружает <mod>
и зависимостей и оставляет остальных нетронутыми.
Контекст оценки контролирует, какие имена находятся в области действия в подсказке, и полностью задокументирован here. Модули для добавления в контекст оценки могут быть либо локальными в целевом наборе + зависимостей, либо быть «пакетными», которые ранее были зарегистрированы в ghc, используя инструмент ghc-pkg
(или cabal
, который вызывает это в конечном итоге). import Foo
- это еще один способ написания :module +Foo
.
ПРИМЕЧАНИЕ: этот ответ представляет собой смесь моего интуитивного понимания из моего опыта использования ghci и просто чтения документации и попыток интеграции двух в моем уме. Так что я, возможно, не получил это на 100% точным!
Вы прочитали [документацию] (http://www.haskell.org/ghc/docs/7.4.1/html/users_guide/ghci-commands.html)? – bheklilr
В документации, безусловно, не говорится о аргументе ': reload' –
@bheklilr У меня не было - это помогает, спасибо – hdgarrood