Haskell / GHCi - 从不同目录加载模块
我的 haskell 应用程序具有以下目录结构:
src/
utils/Utils.hs
subsystem/Subsystem.hs
Subsystem
模块导入 Utils
模块。我想在 GHCi 中手动测试这段代码。
问题是 GHCi 似乎只查找 '.'
(当前目录)中可用的模块,因此我将 Utils.hs
复制到子系统文件夹中并能够手动-测试Subsytem.hs
。有更好的方法吗?例如,我想在 src 目录中启动 GHCi,并让它在 ./utils 和 ./subsystem 目录中搜索模块。我可以指定 GHCi 的模块路径吗?
My haskell application has the following directory structure:
src/
utils/Utils.hs
subsystem/Subsystem.hs
The Subsystem
module imports Utils
module. I would like to hand test this code in GHCi.
The problem is GHCi seems to be only looking for modules available in '.'
(current directory), so I copied Utils.hs
to subsystem folder and was able to hand-test Subsytem.hs
. Is there a better way to do this? For example I would like to start GHCi in the src
directory and let it search for modules in ./utils
and ./subsystem
directories. Can I specify a module path to GHCi?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以使用
-i
选项告诉 GHCi 在哪里搜索模块:这会将
src/Foo/Bar.hs
加载到 GHCi 中。这样,您还可以指定两个不同的目录,如下所示:它将在 ./ 和 ./config/ 中查找依赖项。
请参阅 GHC 用户指南,了解有关模块搜索路径。
You can tell GHCi where to search for modules by using the
-i
option:This will load
src/Foo/Bar.hs
into GHCi. This way, you can also specify two different directories like this:It will look for the dependencies in ./ and ./config/ .
See the GHC user's guide for more information about the module search path.
默认情况下,当 GHC 查找模块时,它将 Foo.Bar 解释为 Foo/Bar.hs。因此,如果您有一个项目,则可以在顶级目录中拥有一个名为
Utils.hs
的模块Utils
和一个模块Utils.Fishcakes
代码>为Utils/Fishcakes.hs
。请注意,Utils.hs
可以与名为Utils
的目录一起存在,或者两者都可以独立存在。常见的风格往往是使用顶级模块来简单地从层次结构中位于其下方的模块中重新导出内容,但这不是必需的。 GHC 用户指南涵盖了上述行为,以及描述支持哪些其他选项。据我所知,在大多数情况下,代码要么使用上述默认结构,要么使用指定为 cabal 构建一部分的其他结构,或者期望作为库安装。
By default, when GHC looks for modules, it interprets
Foo.Bar
asFoo/Bar.hs
. So if you have a single project, you could have a moduleUtils
asUtils.hs
in the top-level directory, and a moduleUtils.Fishcakes
asUtils/Fishcakes.hs
. Note thatUtils.hs
can exist alongside a directory namedUtils
, or both can exist independently. A common style tends to be using the top-level module to simply re-export things from modules below it in the hierarchy, but this isn't required. The GHC User Guide covers the above behavior, as well as describing what other options are supported.As far as I know, in most cases code will either use the above default structure, will use some other structure specified as part of a cabal build, or will expect to be installed as a library.
您可以使用以下内容创建 .ghci 文件:
:set -isrc -iutils -isubsystem
You can create a .ghci file with something like this:
:set -isrc -iutils -isubsystem
如果您的项目如下所示...
您可以在项目的根目录中创建一个
.ghci
文件,与src
、myproject.cabal 相同的目录
和Setup.hs
都在。.gchi
的内容应该是这样。现在你可以从你的项目根目录调用 ghci,它会自动加载任何链接的模块。
If you project looks like the following...
You can create a
.ghci
file in the root directory of the project, same directory thatsrc
,myproject.cabal
andSetup.hs
is in. The content of.gchi
should be this..Now you can call ghci from the root directory of your project and it will auto-load any linked modules.