编译Haskell的多个.hs文件 - Unix

时间:2012-01-19 23:51:00

标签: unix haskell ghc ghci

我在Unix中从一个项目创建了一些文件,它们很多,如果我想在另一个PC或文件夹中执行它,我需要将所有文件复制到那里。它们都在 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' 并且在导入ex1.hs

的行中

好奇的是,如果我将导入ex1.hs 交易到导入ex2.lhs 行会在ex2上出错

2 个答案:

答案 0 :(得分:10)

  1. Haskell模块名称必须以大写字母开头,因此首先将ex1.hsex2.hs重命名为Ex1.hsEx2.hs。它们也应该以{{1​​}}开头,否则模块名称将默认为module Ex1 where,当模块名称与文件名不匹配时,GHC会非常混淆。

  2. 导入语句应该引用模块名称,而不是文件名,因此请在Main中更改它们以对应模块名称。

    main.hs
  3. 现在使用import Ex1 import Ex2 进行编译,它应该自动找到其他模块。它将搜索具有ghc --make main.hs.hs扩展名的模块,并正确地将后者视为有文化的Haskell文件。

  4. 对于大型项目,您应该考虑使用Cabal,这是大多数Haskell库和程序使用的构建系统。它将有助于管理依赖项和编译器选项,有点像Makefile。

答案 1 :(得分:3)

尝试

ghc --make main.hs

这应该让ghc尝试尽一切努力......