1

I'm currently trying out web development frameworks for haskell and I recently came across yesod. It seemed pretty interesting so I installed it using cabal, however I'm not able to run the development server. Following their getting started instructions here's the result:

$ 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...

I'm assuming it has something to do with the Data.Dynamic module but I don't know how to go about fixing it.

Additional Info

Running Ubuntu 10.10 Maverick

ghc version:

$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 6.12.1
4

3 回答 3

4

我还没有遇到这个特定的问题,但错误消息看起来像是一个简单的问题,即 GHC 无法找到版本 3.0.3.2 的包“基础”。这个版本从 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,看看情况如何。最好的情况是它有效。如果没有,请告诉我们。

于 2011-06-02T15:32:59.847 回答
2

根据 Yesod in 五分钟指南,您似乎错过了在“cd mysite”和“yesod devel”之间对命令“cabal install”的调用。它可能需要根据您在“yesod init”期间的响应来安装更多软件包,例如您要使用哪个数据库。

此外,您可能需要检查该端口当前是否未被使用,因为您的成绩单中显示了“地址已在使用中”。

于 2011-10-19T08:40:04.860 回答
0

首先,最好通过删除/重新安装/升级它们来解决 ghc-pkg 检查报告的任何损坏的软件包。

接下来,你可以手动 cabal 毫无问题地构建 mysite 应用程序吗?如果您的 mysite.cabal 实际上没有在 build-depends 列表中指定 base,您应该按照建议添加它。

重复的测试文件消息对于当前的 yesod 开发是正常的,它正在轮询您的源文件。

于 2011-06-30T20:41:11.077 回答