Скомпилируйте несколько файлов .hs из Haskell - Unix - PullRequest
5 голосов
/ 20 января 2012

Я создал несколько файлов из проекта в Unix, их много, и если я хочу выполнить его на другом компьютере или в папке, мне нужно скопировать туда все файлы. Все они связаны в import . Как я могу сделать исполняемую программу на Haskell?

У меня есть для примера:

main.hs - main where all the program executes; using,besides haskell, unix shell.
ex1.hs - basically types of data, some functions.
ex2.lhs - same as ex1.lhs but is literate with LaTeX
pic.jpg - picture to use on the pdflatex
package.sty - package needed to use some functions

Как мне продолжить и скомпилировать все это? Я пытался использовать ghc , но всегда выдавал ошибки:

>ghc -o MAIN main.hs ex1.hs ex2.lhs pic.jpg package.sty

Failed to load interface for 'ex1.hs' И находится в строке, которая имеет import ex1.hs

Любопытно, если я торгую импорт ex1.hs на импорт ex2.lhs Строка выдаст ошибку на ex2

Ответы [ 2 ]

10 голосов
/ 20 января 2012
  1. Имена модулей Haskell должны начинаться с заглавной буквы, поэтому начните с переименования ex1.hs и ex2.hs в Ex1.hs и Ex2.hs. Они также должны начинаться с module Ex1 where, в противном случае имя модуля по умолчанию будет равно Main, и GHC будет очень запутан, если имена модулей не совпадают с именами файлов.

  2. Операторы импорта должны ссылаться на имя модуля, а не имя файла, поэтому измените их в main.hs, чтобы они соответствовали именам модулей.

    import Ex1
    import Ex2
    
  3. Теперь скомпилируйте с ghc --make main.hs, и он автоматически найдет другие модули. Он будет искать модули с расширениями .hs и .lhs и правильно обрабатывать последние как грамотные файлы на Haskell.

Для больших проектов вы должны использовать Cabal , систему сборки, используемую большинством библиотек и программ на Haskell. Это поможет с управлением зависимостями и параметрами компилятора, вроде как Makefile.

3 голосов
/ 20 января 2012

Попробуйте

ghc --make main.hs

Это должно заставить GHC попытаться сделать все возможное ...

...