使用Haskell源代码从不同文件夹导入文件

rea*_*ist 3 haskell cabal

说我有一些像这样的文件夹:

\Code
    \Haskell
        \euler
            \P1.hs
            \P2.hs
            \P3.hs
        \fermat
            \GS
                \primes.hs
Run Code Online (Sandbox Code Playgroud)

我写的一些函数是我primes.hs想用的P3.hs.有没有办法从加载功能primes.hsP3.hs不只是复制和粘贴代码,类似于你可以导入在同一个文件夹中的模块的方式吗?这可以用Cabal完成(我对Haskell很新,我还没有机会熟悉Cabal)?我知道有一些方法可以通过primes.hs手动加载ghci来实现,但我希望能够运行P3.hs并让它工作.

bhe*_*ilr 6

如果您创建cabal项目,这非常简单.我会推荐像这样的结构

project-name/
    src/
        Euler/
            P1.hs
            P2.hs
            P3.hs
        Fermat/
            GS/
                Primes.hs
Run Code Online (Sandbox Code Playgroud)

然后当你cd /path/to/project-name运行时cabal init,在它提示你的时候填写信息,然后你就可以了.您需要做的最后一件事是设置模块名称.模块的名称应反映其在您的src文件夹中的位置,并且由于所有模块名称必须以大写字母开头,这意味着您还需要确保文件夹的大小写正确.在这里,您将有模块Euler.P1,Euler.P2,Euler.P3,和Fermat.GS.Primes.根据需要module Module.Name where在每个文件中声明模块名称,然后您可以根据需要相互导入.模块导入总是完全合格的为好,所以如果你想导入src/Euler/P1.hssrc/Euler/P2.hs,你需要做的import Euler.P1

你可能会遇到一些障碍,但从长远来看,使用cabal来管理你的项目是非常有用的.学习基础知识,您将轻松地设置项目.