我正在开发一个Haskell项目(Happstack服务器+ Blaze HTML /前端作为主库),我想添加一个静态数据目录。
看起来你可以使用自动生成的Path_<package_name>
模块使用Cabal。所以在我的示例中,该包被称为new-website
,因此该模块应该被称为Paths_new_website
。
Link to Cabal docs re: a custom package's Paths_pkgname
module.
从命令行使用cabal repl
,我正在尝试确认我可以访问Paths_
模块。但是,我发现在运行Paths_new_website
时Cabal没有导入cabal_repl
模块。
Here's a link to some relevant code and terminal output via a gist.
有没有人有这方面的经验,让我的包加载一个挑剔的Paths_模块?我怀疑这可能是Main.hs
(主要源文件)与cabal_repl
中的上下文之间的词汇范围问题...
答案 0 :(得分:4)
Paths_*
模块仅在构建期间由Cabal生成。如果您使用GHCi
或cabal repl
运行程序包,则它们将不存在,并且您的代码将因“无法找到模块”错误而失败。
但是有一个偷偷摸摸的开发模式技巧:只需构建自己的Paths_*
模块并将其放在haskell-source-dir
中。在开发期间,GHCi
将加载该模块,您可以调整其导出的符号以使您的开发环境飞起来。在构建期间,Cabal将使用自己的模块覆盖您的模块,并考虑构建Paths_*
模块所需的最终信息。
因此,在这种特殊情况下,只需创建一个文件src/Paths_stackbuilders.hs
并为其提供datadir
的相对路径。