【发布时间】:2014-04-07 15:01:09
【问题描述】:
我第一次尝试在 Haskell 中构建一个独立的程序,但在弄清楚如何让 ghc --make 与我喜欢的目录组织一起工作时遇到了麻烦。目前我有以下树:
readme.md
src/
Main.hs
Ciphers/
Affine.hs
Shift.hs
Substitution.hs
Tests/
HCTests.hs
使用以下导入:
Main.hs:
module Main where
import Tests.HCTests
import Ciphers.Affine
import Ciphers.Shift
import Ciphers.Substitution
HCTests.hs
module Tests.HCTests (unitTests) where
import Ciphers.Substitution
import Ciphers.Affine
import Ciphers.Shift
仿射.hs
module Affine (
affineEnc,
affineDec,
) where
Shift.hs
module Shift (
shiftEnc,
shiftDec
) where
import Affine
替换.hs
module Substitution (
substitutionEnc,
substitutionDec,
) where
基于此 - https://en.wikibooks.org/wiki/Haskell/Standalone_programs - 在我看来,以下命令至少应该正确处理 main 中的导入,尽管我不清楚 HCTests 中的导入是否会起作用(在我看来,如果我正确阅读了这个- Specifying "Up The Tree" Haskell Modules - 他们应该)。
我在基本目录中运行的命令是:
ghc -O2 --make -i src -o crypto Main.hs
因错误而失败:
target `src' is not a module name or a source file
编辑
我还有一个问题。感谢 Zeta 的回答,我已经把它排序了,但是当我运行它时,我收到以下错误:
src/Ciphers/Substitution.hs:5:8:
File name does not match module name:
Saw: `Substitution'
Expected: `Ciphers.Substitution'
所以我的假设是我会通过以下方式解决这个问题:
替换.hs
module Ciphers.Substitution (
substitutionEnc,
substitutionDec,
) where
我的问题是如何处理 Shift.hs 需要导入 Affine.hs,而我仍然需要 Ciphers.Shift 和 Ciphers.Affine?
【问题讨论】:
-
正如 Zeta 的回答所指出的,Wikibook 中有一个错字。现在已修复。
-
实际上,在 Shift.hs 中导入 Ciphers.Affine 似乎有效。当我试图在没有 make 的情况下简单地编译 Affine.hs 时,它之前抛出了一个错误。