我目前正在为haskell尝试网络开发框架,最近我遇到了yesod。它似乎很有趣所以我使用cabal安装它,但是我无法运行开发服务器。在他们开始使用说明后,结果如下:
$ yesod init
$ cd mysite
$ yesod devel
Configuring mysite-0.0.0...
Testing files...
Rebuilding app
yesod: bind: resource busy (Address already in use)
Preprocessing library mysite-0.0.0...
Preprocessing executables for mysite-0.0.0...
Building mysite-0.0.0...
Controller.hs:16:7:
Could not find module `Data.Dynamic':
It is a member of the hidden package `base'.
Perhaps you need to add `base' to the build-depends in your .cabal file.
It is a member of the hidden package `base-3.0.3.2'.
Perhaps you need to add `base' to the build-depends in your .cabal file.
Use -v to see a list of the files searched for.
Testing files...
Testing files...
^^ above line just keeps repeating...
我认为它与Data.Dynamic模块有关,但我不知道如何修复它。
运行Ubuntu 10.10 Maverick
ghc版本:
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 6.12.1
答案 0 :(得分:4)
我没有碰到这个特定的问题,但是错误消息看起来像是一个简单的问题,GHC无法找到3.0.3.2版本的软件包“base”。自GHC 6.9以来,这个版本已经可以构建,所以你应该拥有它。尝试运行以下命令:
ghc-pkg check
这会告诉您包裹是否有问题。 Cabal对依赖性来说可能是一个噩梦 - 部分似乎是因为很多Haskell开发人员低估了他们底层库在未来的转移程度。因此,他们将依赖关系定义为“> = [包x的版本]”,而不将最大版本限制为当前可用的版本。或者他们完全不考虑版本限制。
Yesod,我很高兴地说,不会陷入这个陷阱。但它依赖的几个库都可以。当您开始在Haskell中开发时,请学习本课程:永远不要假设库的未来版本不会破坏您的代码。他们会的。很多。
如果ghc-pkg出现破损的软件包,您可能需要清理/卸载/重新安装这些软件包,直到它们被清理或隐藏。 (只需要ghc-pkg hide [package name]
告诉ghc忽略该包。
你的下一个问题是隐藏的基础包。请尝试以下方法:
ghc-pkg list | grep base
如果您在库周围看到括号,则表示它已隐藏。包base-3.0.3.2可能会显示为隐藏(虽然这有点不太可能,因为这是向后兼容的Prelude所在的位置)。如果它被隐藏,请尝试使用以下命令取消隐藏:
ghc-pkg expose base-3.0.3.2
现在尝试重新运行yesod devel
,看看它是怎么回事。最好的情况是它有效。如果没有,请告诉我们。
答案 1 :(得分:2)
根据五分钟的Yesod指南,你似乎错过了对你的“cd mysite”和“yesod devel”之间命令“cabal install”的调用。它可能需要根据您在“yesod init”期间的响应安装更多软件包,例如您要使用的数据库。
此外,您可能想要检查当前是否正在使用该端口,因为您的成绩单中显示了“已在使用的地址”。
答案 2 :(得分:0)
首先,通过删除/重新安装/升级它们来解决ghc-pkg检查报告的任何损坏的软件包是个好主意。
接下来,您可以手动cabal构建mysite应用程序吗?如果你的mysite.cabal实际上没有在build-depends列表中指定base,你应该按照建议添加它。
重复的测试文件消息对于当前的yesod devel是正常的,它正在轮询你的源文件。