Каков синтаксис 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