我该把Haskell的“模块”保存在哪里?

5

我将一些函数放在了一个文件中。在我的电脑上,我应该把这个文件保存在哪里,以便可以轻松地加载我的函数?

我正在使用 Windows 64 位计算机上的 Haskell 平台。


1
在云端中...(另一个糟糕的笑话) - Thomas Eding
2个回答

9

我通常把我的模块放在同一目录树中,并在该目录的根目录启动ghci。然后模块可以相互导入,我可以轻松地将模块交互地加载到ghci中。

$ ghci

.... loading ....

Prelude> :load directory/subdirectory/mymodule.hs

我的 ghciC:\Program Files (x86)\Haskell Platform\2011.2.0.0\bin。我需要把它们放在这里吗? - Dynamic
不!安装时应该将其放置在路径或环境变量中,这样您就可以从命令行运行ghci,无论您在哪个目录中。如果环境变量没有正确设置,您可以通过控制面板手动更改它们。 - Matt Fenwick
等等...什么?你在电脑上用什么来存储你的函数? - Dynamic
2
@perl.j -- 我创建了一些目录,任何我想要的地方,可能在我的文档中。我把所有的Haskell东西都放在那里,包括有函数的模块(为了更好的效果!)。然后,我打开shell,移动到那个目录,输入ghci。即使它在不同的目录中,Windows也知道在哪里找到ghci - Matt Fenwick

2
如果您希望您的模块可以从几个不同的项目中访问,我建议您为它们创建一个cabal包,并使用cabal install进行安装。发布到hackage并非必须 - cabal install无需参数即可查找当前目录中的.cabal文件并安装相应的包。
如果您希望您的模块仅能从单个项目中访问 - Haskell也适用于将源代码组织在分层文件树中的常规做法。让我举个例子:
Hello/World.hs
Foo/Bar.hs
Quux.hs
Hello.hs

Hello/World.hs 文件头部应该有module Hello.World where。 主模块应该是module Main,但实际文件名可以是任何东西(例如Quux.hs)。 在Foo / Bar.hs中,您可以使用import Hello.World。 当你在ghci中加载Foo/Bar.hs时,当前目录应该是你的树的根目录,否则它将找不到Hello.World。 您可以传递模块名称而不是文件名给ghci:例如,ghci Hello.World将起作用。
以下是文档说明: http://haskell.org/ghc/docs/latest/html/users_guide/separate-compilation.html http://haskell.org/ghc/docs/latest/html/users_guide/packages.html

Cabal现在非常容易使用;对于这种情况,它几乎完全自动化(cabal init会为您生成一个.cabal文件,您只需要填写构建依赖项即可)。 - Sumudu Fernando

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接