MrF*_*bio 5 unix haskell ghc ghci
我在Unix中的一个项目中创建了一些文件,它们很多,如果我想在另一个PC或文件夹中执行它,我需要将所有文件复制到那里.它们都是导入连接的.如何制作可执行的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
Run Code Online (Sandbox Code Playgroud)
我如何进行并编译所有这些?我尝试使用ghc但总是出错:
>ghc -o MAIN main.hs ex1.hs ex2.lhs pic.jpg package.sty
Run Code Online (Sandbox Code Playgroud)
Failed to load interface for 'ex1.hs'
并且在导入ex1.hs的行中
好奇的是,如果我换进口ex1.hs到进口ex2.lhs线会给EX2错误
ham*_*mar 10
Haskell模块名称必须以大写字母开头,因此首先重命名ex1.hs并ex2.hs使用Ex1.hs和Ex2.hs.它们也应该从一开始module Ex1 where,否则模块名称将默认为Main,并且当模块名称与文件名不匹配时GHC将非常混淆.
Import语句应该引用模块名称,而不是文件名,因此将它们更改main.hs为对应于模块名称.
import Ex1
import Ex2
Run Code Online (Sandbox Code Playgroud)现在编译ghc --make main.hs,它应该自动找到其他模块.它将搜索具有两个.hs和.lhs扩展名的模块,并正确地将后者视为有文化的Haskell文件.
对于大型项目,您应该考虑使用Cabal,这是大多数Haskell库和程序使用的构建系统.它将有助于管理依赖项和编译器选项,有点像Makefile.