Haskell / GHCi - загрузка модулей из разных каталогов - PullRequest
27 голосов
/ 07 июля 2011

Мое приложение на haskell имеет следующую структуру каталогов:

src/
    utils/Utils.hs
    subsystem/Subsystem.hs

Модуль Subsystem импортирует модуль Utils. Я хотел бы вручную проверить этот код в GHCi.

Проблема в том, что GHCi, похоже, ищет только модули, доступные в '.' (текущий каталог), поэтому я скопировал Utils.hs в папку подсистемы и смог вручную проверить Subsytem.hs. Есть лучший способ сделать это? Например, я хотел бы запустить GHCi в каталоге src и позволить ему искать модули в каталогах ./utils и ./subsystem. Могу ли я указать путь к модулю GHCi?

Ответы [ 4 ]

21 голосов
/ 07 июля 2011

Вы можете указать GHCi, где искать модули, используя опцию -i:

ghci Foo.Bar -isrc

Это загрузит src/Foo/Bar.hs в GHCi.Таким образом, вы также можете указать две разные директории, такие как:

ghci Bar.hs -i.:config 

Он будет искать зависимости в ./ и ./config/.

Смотрите пользователя GHCРуководство для получения дополнительной информации о модуле поиска пути .

10 голосов
/ 07 июля 2011

По умолчанию, когда GHC ищет модули, он интерпретирует Foo.Bar как Foo/Bar.hs. Поэтому, если у вас есть один проект, вы можете иметь модуль Utils как Utils.hs в каталоге верхнего уровня и модуль Utils.Fishcakes как Utils/Fishcakes.hs. Обратите внимание, что Utils.hs может существовать рядом с каталогом с именем Utils, или оба могут существовать независимо. Обычный стиль имеет тенденцию использовать модуль верхнего уровня, чтобы просто реэкспортировать вещи из модулей под ним в иерархии, но это не обязательно. Руководство пользователя GHC описывает вышеуказанное поведение, а также описывает, какие другие опции поддерживаются.

Насколько мне известно, в большинстве случаев код будет использовать вышеуказанную структуру по умолчанию, будет использовать какую-то другую структуру, указанную как часть сборки cabal, или будет ожидать установки в виде библиотеки.

9 голосов
/ 07 июля 2011

Вы можете создать файл .ghci, например:

: set -isrc -iutils -isubsystem

4 голосов
/ 22 сентября 2014

Если ваш проект выглядит следующим образом ...

src/
    utils/Utils.hs
    subsystem/Subsystem.hs
.....
myproject.cabal
Setup.hs

Вы можете создать файл .ghci в корневом каталоге проекта, в том же каталоге, в котором находятся src, myproject.cabal и Setup.hs. Содержимое .gchi должно быть следующим:

:set -isrc/utils -isrc/subsystem

Теперь вы можете вызвать ghci из корневого каталога вашего проекта, и он автоматически загрузит все связанные модули.

$ ghci
GHCi, version 7.8.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude>:load src/subsystem/Subsystem.hs
... should load Subsystem.hs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...