我正在使用pkb
模板使用Yesod构建一个简单的Web应用程序(名为yesod-simple
)。我需要一堆在lts-6.25中没有最新版本的库(yesod-simple
的当前默认值),所以我将解析器更改为stack.yaml
中的lts-7.9。我还阅读了this issue with GHC 8.0.1并通过添加
{-# LANGUAGE NoDisambiguateRecordFields #-}
{-# LANGUAGE NoRecordWildCards #-}
在必要时将任何X{..}
更改为带记录的显式表示法。现在我的包使用stack build
成功构建,使用stack test
运行单元测试没有任何问题。当我使用stack exec pkb
启动我的应用程序时,我可以访问该网站,一切正常。在GHCi中加载应用程序也可以正常工作(使用stack exec cabal repl
,然后在提示符下键入appMain
+ [Enter]。
现在,当我尝试使用stack exec -- yesod devel
(在切换到lts-7.9之前曾经工作)运行开发服务器时,我收到以下错误:
app/devel.hs:2:1: error:
Failed to load interface for ‘Application’
It is a member of the hidden package ‘pkb-0.0.0@pkb-0.0.0-6TveDldRrhNJw1vO6l4VeJ’.
It is a member of the hidden package ‘pkb-0.0.0@pkb-0.0.0-AeggierDgKl46ITEmuA1C2’.
查看stack exec -- yesod -v devel
的输出,我可以看到pkb
包位于搜索的目录列表中。此外,还存在加载pkb
包所需的所有文件:
$ ls -l .stack-work/install/x86_64-linux/lts-7.9/8.0.1/pkgdb
total 12
-rw-r--r-- 1 sam sam 5738 Nov 19 20:26 package.cache
-rw-r--r-- 1 sam sam 2536 Nov 19 20:26 pkb-0.0.0-AeggierDgKl46ITEmuA1C2.conf
$ ls -l .stack-work/install/x86_64-linux/lts-7.9/8.0.1/lib/x86_64-linux-ghc-8.0.1
total 4
drwxr-xr-x 6 sam sam 4096 Nov 19 20:26 pkb-0.0.0-AeggierDgKl46ITEmuA1C2
$ ls -l .stack-work/install/x86_64-linux/lts-7.9/8.0.1/bin
total 27440
-rwxr-xr-x 1 sam sam 28094672 Nov 19 20:26 pkb
那么为什么pkb
包仍然根据此错误消息“隐藏”?
我有上述命令here的输出。
如果您需要更多信息,请告诉我,我很乐意提供。
答案 0 :(得分:0)
猜一猜:自从改变你的解析器后你运行stack build yesod-bin
了吗?我的猜测是你正在运行针对旧GHC版本编译的yesod可执行文件。
答案 1 :(得分:0)
这个问题最近在yesod代码库中得到了解决,但它还没有在yesod master分支中。要使用yesod devel
和GHC 8,您可以执行以下操作(暂时)。
1304-stack-based-devel
分行。stack install yesod-bin
。这应该安装yesod
可执行文件。确保此可执行文件位于$PATH
。cd
到您的项目文件夹。
yesod devel
(不要运行stack exec -- yesod devel
)。 rm -rf yesod-devel dist .stack-work static/tmp && stack clean && stack build
(这可能有点过分,但不会造成任何伤害,为什么不呢)。 您现在应该可以再次运行开发服务器。
stack ghci
(不是stack exec cabal repl
)。 stack build
和stack test
像以前一样工作。
以下是此问题的pull request。