Haskell/GHCi - 从不同目录加载模块

sim*_*mon 28 haskell ghci haskell-platform

我的haskell应用程序具有以下目录结构:

src/
    utils/Utils.hs
    subsystem/Subsystem.hs
Run Code Online (Sandbox Code Playgroud)

Subsystem模块导入Utils模块.我想在GHCi中手动测试这段代码.

问题是GHCi似乎只是在'.'(当前目录)中寻找可用的模块,所以我复制Utils.hs到子系统文件夹并且能够进行手工测试Subsytem.hs.有一个更好的方法吗?例如,我想在src目录中启动GHCi ,让它搜索模块./utils./subsystem目录.我可以指定GHCi的模块路径吗?

ham*_*mar 21

您可以使用以下-i选项告诉GHCi在哪里搜索模块:

ghci Foo.Bar -isrc
Run Code Online (Sandbox Code Playgroud)

这将加载src/Foo/Bar.hs到GHCi中.这样,您还可以指定两个不同的目录,如下所示:

ghci Bar.hs -i.:config 
Run Code Online (Sandbox Code Playgroud)

它将在./和./config/中查找依赖项.

有关模块搜索路径的详细信息,请参阅GHC用户指南.


C. *_*ann 10

默认情况下,当GHC查找模块时,它会解释Foo.BarFoo/Bar.hs.所以,如果你有一个项目,你可以有一个模块UtilsUtils.hs在顶层目录,和模块Utils.Fishcakes作为Utils/Fishcakes.hs.请注意,它Utils.hs可以与名为的目录一起存在Utils,或者两者都可以独立存在.一种常见的风格倾向于使用顶级模块简单地从层次结构中的下面的模块重新导出内容,但这不是必需的.该GHC用户指南涵盖了上述行为,以及描述什么其他选择的支持.

据我所知,在大多数情况下,代码将使用上面的默认结构,将使用指定为cabal构建的一部分的其他结构,或者期望作为库安装.


mig*_*yte 10

您可以使用以下内容创建.ghci文件:

:set -isrc -iutils -isubsystem