[英]Haskell / GHCi - loading modules from different directories
我的 haskell 应用程序具有以下目录结构:
src/
utils/Utils.hs
subsystem/Subsystem.hs
Subsystem
模块导入Utils
模块。 我想在 GHCi 中手动测试这段代码。
问题是 GHCi 似乎只在寻找'.'
(当前目录),所以我将Utils.hs
复制到了子系统文件夹并能够手动测试Subsytem.hs
。 有一个更好的方法吗? 例如,我想在src
目录中启动 GHCi 并让它在./utils
和./subsystem
目录中搜索模块。 我可以指定 GHCi 的模块路径吗?
您可以使用-i
选项告诉 GHCi 在哪里搜索模块:
ghci Foo.Bar -isrc
这会将src/Foo/Bar.hs
到 GHCi 中。 这样,您还可以像这样指定两个不同的目录:
ghci Bar.hs -i.:config
它将在./ 和./config/ 中查找依赖项。
默认情况下,当 GHC 查找模块时,它将Foo.Bar
解释为Foo/Bar.hs
。 因此,如果您有一个项目,则可以在顶级目录中将模块Utils
作为Utils.hs
,并将模块Utils.Fishcakes
作为Utils/Fishcakes.hs
。 请注意, Utils.hs
可以与名为Utils
的目录一起存在,或者两者都可以独立存在。 一种常见的风格往往是使用顶级模块来简单地从层次结构中它下面的模块重新导出事物,但这不是必需的。 GHC 用户指南涵盖了上述行为,并描述了支持哪些其他选项。
据我所知,在大多数情况下,代码要么使用上述默认结构,要么使用作为 cabal 构建的一部分指定的其他结构,或者期望作为库安装。
您可以使用以下内容创建一个 .ghci 文件:
:set -isrc -iutils -isubsystem
如果您的项目如下所示...
src/
utils/Utils.hs
subsystem/Subsystem.hs
.....
myproject.cabal
Setup.hs
您可以在项目的根目录下创建一个.ghci
文件,与src
、 myproject.cabal
和Setup.hs
所在的目录相同。 .gchi
的内容应该是这个..
:set -isrc/utils -isrc/subsystem
现在您可以从项目的根目录调用 ghci,它会自动加载任何链接的模块。
$ ghci
GHCi, version 7.8.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude>:load src/subsystem/Subsystem.hs
... should load Subsystem.hs
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.