我最近安装了适用于Windows的Haskell平台,用于我正在进行的编程课程。它包括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.
我已经完成了recache,并重新输入了“expose”命令,但仍然没有结果。
任何解决方案都会非常感激!
答案 0 :(得分: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
的{{1}}文件允许。对该问题的正确解决方法是放宽.cabal
上的依赖关系(应该由作者完成,但在固定版本处于hackage之前,用户应该编辑time
文件到允许.cabal
如果他有time-1.4.*
,那么可以构建包而无需重新安装任何东西,从而可能破坏已安装的软件包。)
重新安装ghc >= 7.4
,time
和random
可能会破坏许多软件包,从命令行运行QuickCheck
以评估损坏情况。也许只需ghc-pkg check
ghc-pkg unregister
并重新安装time-1.2.0.5
和random
就可以修复它,也许您需要重新安装更多,也许是整个平台。
在以某种方式修复损坏的软件包后,转到QuickCheck
目录,编辑Craft3e-0.1.0.8
文件,更改行
Craft3e.cabal
在time >= 1.1 && < 1.3,
字段中
build-depends
并在那里运行time >= 1.1 && < 1.5,
。
cabal install --disable-documentation
右。该软件包不会暴露任何模块,因此它所附带的所有模块都是隐藏的(不确定它是否真的有用)。您只能从它们所在的目录加载它们,因为ghci更喜欢将源文件从当前目录(树)加载到包模块。如果从该目录调用ghci,它应该加载该文件。 (或者,您也可以在从另一个目录Could not find module `PicturesSVG'
it is a hidden module in the package `Craft3e-0.1.0.8'
调用ghci时指定目录的路径。)
答案 1 :(得分:2)
Craft3e
packege doesn't actually expose any modules。 cabal文件似乎主要用于分发和依赖目的,而不是为您提供正确的库接口,因此要加载任何模块,您始终需要明确打开包含它的文件。
答案 2 :(得分:1)
我已更新Craft3e包以考虑新版本的Time。对由此引起的任何问题道歉。