我在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上出错
答案 0 :(得分:10)
Haskell模块名称必须以大写字母开头,因此首先将ex1.hs
和ex2.hs
重命名为Ex1.hs
和Ex2.hs
。它们也应该以{{1}}开头,否则模块名称将默认为module Ex1 where
,当模块名称与文件名不匹配时,GHC会非常混淆。
导入语句应该引用模块名称,而不是文件名,因此请在Main
中更改它们以对应模块名称。
main.hs
现在使用import Ex1
import Ex2
进行编译,它应该自动找到其他模块。它将搜索具有ghc --make main.hs
和.hs
扩展名的模块,并正确地将后者视为有文化的Haskell文件。
对于大型项目,您应该考虑使用Cabal,这是大多数Haskell库和程序使用的构建系统。它将有助于管理依赖项和编译器选项,有点像Makefile。
答案 1 :(得分:3)
尝试
ghc --make main.hs
这应该让ghc尝试尽一切努力......