0

我最近为我正在学习的编程课程安装了 Haskell Platform for Windows。它包括作为编译器的 GHCi 和作为打包系统的 Cabal。我一直在尝试使用 Cabal 安装 Craft3e 包,因为这是我的教科书使用的练习包,但无济于事。要安装 Craft3e,我只需cabal unpack Craft3e在命令提示符中输入,它会创建目录“\Craft3e-0.1.0.8”。进入目录后,我输入cabal install --disable-documentation,它给了我以下信息:

Resolving dependencies...
In order, the following would be installed: 
time-1.2.0.5 (new version)
random-1.0.1.1 (reinstall) changes: time-1.4 -> 1.2.0.5
QuickCheck-2.5.1.1 (reinstall)
Craft3e-0.1.0.8 (new package)
cabal: The following packages are likely to be broken b
haskell-platform-2012.4.0.0
Use --force-reinstalls if you want to install anyway.

使用后cabal install --disable-documentation --force-reinstalls,按预期安装。我加载了一个模块来测试它:ghci PicturesSVG. 这成功加载。但是,一旦我退出 GHCi 编译器并重新进入它,我就无法再从 Craft3e 包中加载模块;相反,我收到消息:

GHCi, version 7.4.2: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.

<command line>:
    Could not find module `PicturesSVG'
    it is a hidden module in the package `Craft3e-0.1.0.8'
    Use -v to see a list of the files searched for.
 Failed, modules loaded: none.

发生了什么?当我进入时,包裹仍然出现ghc-pkg list。我试过输入ghc-pkg expose Craft3e-0.1.0.8,但提示告诉我:

WARNING: cache is out of date: C:/Program Files (x86)/Haskell Platform/2012.4.0.
0\lib\package.conf.d\package.cache
  use 'ghc-pkg recache' to fix.

我已经完成了重新缓存,并重新输入了“公开”命令,但仍然没有结果。

任何解决方案将不胜感激!

4

3 回答 3

3
cabal: The following packages are likely to be broken b
haskell-platform-2012.4.0.0

这是一个非常糟糕的迹象。你应该只--force-reinstalls在你非常清楚自己在做什么的情况下使用,作为一个新学习者,你或多或少从定义上不知道。cabal应该更严厉地警告。

问题的根源是包的依赖项被指定得太严格,以至于默认情况下无法与 ghc-7.4 或更高版本一起使用,因为它们附带的time包版本大于craft3e's.cabal文件所允许的版本。解决该问题的正确方法是放松对time( 应该由作者完成的依赖绑定,但在固定版本被破解之前,用户应该编辑.cabal文件以允许time-1.4.*if (s)he has a ghc >= 7.4,所以该软件包可以在不重新安装任何东西的情况下构建,因此可能会破坏已安装的软件包)。

重新安装并可能破坏了许多软件包,从命令行运行time以评估损坏情况。也许只是重新安装并修复它,也许您需要重新安装更多,也许是整个平台。randomQuickCheckghc-pkg checkghc-pkg unregistertime-1.2.0.5randomQuickCheck

在以某种方式修复损坏的软件包后,转到Craft3e-0.1.0.8目录,编辑Craft3e.cabal文件,更改行

time >= 1.1 && < 1.3,

在该build-depends领域

time >= 1.1 && < 1.5,

并跑到cabal install --disable-documentation那里。


Could not find module `PicturesSVG'
it is a hidden module in the package `Craft3e-0.1.0.8'

正确的。该软件包不公开任何模块,因此它附带的所有模块都是隐藏的(不确定这是否真的是有意的)。您只能从它们所在的目录加载它们,因为 ghci 更喜欢从当前目录(树)加载源文件而不是打包模块。如果您从该目录调用 ghci,它应该加载该文件。(或者您也可以在从另一个目录调用 ghci 时指定目录的路径,ghci -ipath/to/Craft3e-0.1.0.8 PicturesSVG。)

于 2013-01-14T21:28:12.840 回答
2

packegeCraft3e实际上并没有公开任何modules。cabal 文件似乎主要用于分发和依赖目的,而不是为您提供适当的库接口,因此要加载任何模块,您总是需要显式打开包含它的文件。

于 2013-01-14T21:22:30.100 回答
1

我已经更新了 Craft3e 包以考虑新版本的时间。对造成的任何问题表示歉意。

于 2013-01-25T17:44:18.087 回答