Haskell ghc—生成模块层次结构

Haskell ghc—生成模块层次结构,haskell,ghc,Haskell,Ghc,我第一次尝试在Haskell中构建一个独立的程序,但我很难弄清楚如何获得ghc——让我喜欢的目录组织工作起来。当我看到下面这棵树时: 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.

我第一次尝试在Haskell中构建一个独立的程序,但我很难弄清楚如何获得ghc——让我喜欢的目录组织工作起来。当我看到下面这棵树时:

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
六氯环己烷

module Tests.HCTests (unitTests) where

import Ciphers.Substitution
import Ciphers.Affine
import Ciphers.Shift
仿射

module Affine (
  affineEnc,
  affineDec,
  ) where
Shift.hs

module Shift (
  shiftEnc,
  shiftDec
  ) where

import Affine
替换.hs

module Substitution (
  substitutionEnc,
  substitutionDec,
  ) where
module Ciphers.Substitution (
  substitutionEnc,
  substitutionDec,
  ) where
基于这一点——在我看来,下面的命令至少应该正确地处理main中的导入,尽管我不清楚HCTests中的导入是否会工作(在我看来,如果我正确地阅读了它,它们应该工作)

我在基本目录中运行的命令是:

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 Substitution (
  substitutionEnc,
  substitutionDec,
  ) where
module Ciphers.Substitution (
  substitutionEnc,
  substitutionDec,
  ) where

我的问题是如何处理该Shift.hs需要导入Affine.hs,而我仍然需要Ciphers.Shift和Ciphers.Affine?

您不能使用空格分隔命令行选项
-I
和搜索路径,因为使用以下空格的
-I
会重置搜索路径

使用


相反。

没关系,我有一个经过编辑的问题,我将附加到主问题之后,这个评论不起作用。@JackGibbs:如果编辑对你的问题有重大改变,通常最好发布一个新问题。但我们会在编辑后再看。@JackGibbs您的模块名称应该与目录结构匹配,因此它们应该是
密码、仿射密码、替换密码等。我不认为它有多大作用,它是沿着相同的路线(我认为适合在同一标题下),事实上,杜普洛德的评论是正确的。正如泽塔的回答所指出的,维基百科中有一个打字错误。它现在是固定的。实际上,它看起来像是导入密码。Shift.hs中的仿射密码可以工作。它在我之前试图编译Affine.hs而不使用make时抛出了一个错误。