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/中查找依赖项.
C. *_*ann 10
默认情况下,当GHC查找模块时,它会解释Foo.Bar
为Foo/Bar.hs
.所以,如果你有一个项目,你可以有一个模块Utils
是Utils.hs
在顶层目录,和模块Utils.Fishcakes
作为Utils/Fishcakes.hs
.请注意,它Utils.hs
可以与名为的目录一起存在Utils
,或者两者都可以独立存在.一种常见的风格倾向于使用顶级模块简单地从层次结构中的下面的模块重新导出内容,但这不是必需的.该GHC用户指南涵盖了上述行为,以及描述什么其他选择的支持.
据我所知,在大多数情况下,代码将使用上面的默认结构,将使用指定为cabal构建的一部分的其他结构,或者期望作为库安装.