Haskell 哈斯凯尔阴谋集团包-can';找不到路径\模块
我正在从事一个Haskell项目(Happstack服务器+Blaze HTML/前端作为主库),我想添加一个静态数据目录 看起来您可以使用自动生成的Haskell 哈斯凯尔阴谋集团包-can';找不到路径\模块,haskell,cabal,Haskell,Cabal,我正在从事一个Haskell项目(Happstack服务器+Blaze HTML/前端作为主库),我想添加一个静态数据目录 看起来您可以使用自动生成的路径模块对Cabal执行此操作。因此,在我的示例中,这个包被称为new-website,因此模块应该被称为Paths\u-new\u-website 从命令行并使用cabal repl,我试图确认我将有权访问路径模块。但是,我发现在运行Cabal\u repl时,Cabal没有导入path\u new\u网站模块 有没有人有过这样的经验,在我的
路径
模块对Cabal执行此操作。因此,在我的示例中,这个包被称为new-website
,因此模块应该被称为Paths\u-new\u-website
从命令行并使用cabal repl
,我试图确认我将有权访问路径
模块。但是,我发现在运行Cabal\u repl
时,Cabal没有导入path\u new\u网站
模块
有没有人有过这样的经验,在我的包中加载一个挑剔的路径模块?我怀疑这可能是
Main.hs
(主要源文件)与cabal\u repl
中上下文之间的词法范围问题。路径*
模块仅由cabal在构建期间生成。如果您使用GHCi
或cabal repl
运行包,则它们根本不存在,您的代码将失败并出现“找不到模块”错误
不过,有一个偷偷摸摸的开发模式技巧:只需构建自己的路径*
模块,并将其放在haskell源目录中。在开发过程中,GHCi
将加载该模块,您可以调整其导出的符号以使您的开发环境正常运行。在构建过程中,Cabal将用自己的模块覆盖您的模块,并考虑构建路径*
模块所需的最终信息
因此,在这种特殊情况下,只需创建一个文件src/Paths\u stackbuilders.hs
,并为其提供一个到datadir
的相对路径,您是否在编译或加载到GHCi时遇到问题?Cabal在构建期间只生成这些路径*
模块。(编辑:哦,刚刚看到,cabalrepl
)@J.Abrahamson谢谢你!事实证明,我只需要在Main.hs
内部执行导入路径(其中*
是.cabal
构建文件中的包名)。cabal文档使得我似乎只需要在其他模块下的文件中添加路径*
,我就可以自动访问路径*
模块。不是这样!事实上,即使没有添加到我的.cabal
文件中,当你说“在构建期间”时,我也能够将自动生成的路径导入Main
@J.Abrahamson中,据我所知,cabal repl
正在执行一个构建-对吗?你也可以执行ghci-idist/build/autogen
我按照你建议的方式尝试了,使用了一个手写的插入式假模块。但是cabalbuild
使用了假模块,没有覆盖或超播它(cabal1.18)为什么cabal repl
编译路径\u pkgname.hs
如果它在repl内部不可用?如果使用堆栈构建
,则执行:set-i.stack-work/dist/x86\u 64-linux-tinfo6/cabal-2.4.0.1/build/autogen
或将其包含在命令行(或.ghci)中。如果stack exec ghci
会自动包含这一点,这将是可取的。