Каков синтаксис Haskell для импорта модулей в подкаталоги?
каков синтаксис Haskell для импорта модулей в другой каталог?
Я начинаю работу с Haskell и хочу практиковать написание простых функций TDD style с HUnit. У меня возникли проблемы с тем, как структурировать мои файлы. Пример, который поставляется с HUnit, кажется плоской структурой каталогов.
Я хотел бы иметь мои тесты и код HUnit в другой папке, чем мой фактический код. Я был бы признателен за быстрый пример инструкции import и предложение о том, как я могу структурировать свои файлы.
Если это имеет значение, я использую GHCi и NotePad++, чтобы сделать мое кодирование прямо сейчас.
2 ответов
вы на самом деле не делаете это из исходного кода Haskell; вместо этого вы говорите компилятору, где искать. Обычный метод заключается в следующем .файл Кабал-клана. См.руководство пользователя cabal для сведения. Вам нужен параметр" hs-source-dirs".
в качестве альтернативы вы можете передать путь непосредственно компилятору. Однако Кабал-лучший метод.
каждый путь в параметре" hs-source-dirs " указывает корень иерархии модулей. В основном, если вы импортируете модуль называется " Data.Foo.Bar "затем компилятор ищет файл с относительным именем пути" Data/Foo / Bar.hs "в каждом каталоге, заданном" HS-source-dirs " и импортирует первый, который он находит.
Павла ответ находится на месте, но я просто хотел расширить идею передачи пути непосредственно компилятору для быстрого и простого решения, в основном для запуска скриптов с runhaskell
или runghc
.
все, что вам нужно сделать, это пройти -i
флаг компилятору с разделенным двоеточием списком каталогов. Затем компилятор проверит эти каталоги на наличие исходных файлов импортированных модулей.
так, например, если у вас есть структура каталогов выглядит так:
home/
|-- user/
|-- haskell/
|-- Module1.hs
|-- foo/
|-- Module2.hs
и вы хотели бы Module2
чтобы иметь возможность импортировать Module1
, затем в Module2.hs
добавить оператор импорта как обычно:
import Module1
тогда при выполнении Module2.hs
используя runhaskell
вы бы запустить его вот так:
$ cd /home/user/haskell/foo
$ runhaskell -i/home/user/haskell Module2.hs
ссылка: http://www.haskell.org/ghc/docs/7.0.1/html/users_guide/separate-compilation.html#search-path