我将描述迄今为止对我有用的解决方法。我尝试了很多不同的东西,但我只会在这里描述有效的尝试。
(顺便说一句:我使用的是 Mac OS X 10.6.4,您的结果在不同系统上可能会有所不同)
- 我从源代码安装了 GHC 6.12.3。不要删除您以前的 GHC,因为构建 GHC 需要它。
- 我删除了
/usr/bin
(for ghc
, ghci
, ghc-pkg
, and runhaskell
) 的符号链接到我以前的 GHC,它是来自 Haskell Platform 2010.1.0.1 安装程序的那个。
- 我
cabal-install
使用它的bootstrap.sh
脚本安装。
random
我安装了和haskell98
包的补丁版本。差异只是在他们的.cabal
文件
中
- 将
random
的版本升级到1.0.0.2.1
并将其依赖更改time
为time == 1.1.*
- bumped
haskell98
的版本最多1.0.1.1.1
就是这样
- 我跑过去看看哪些包已经过时了
cabal update
。cabal upgrade
我做了cabal install
那些。我相信这有助于更快地达到稳定状态。(请注意,syb
安装失败,并且cabal install parsec
如果说不同的话,就没有什么可做的了cabal upgrade
。所以我把这两个包单独留下了)
ghc-pkg check
我通过在各个阶段之间运行来验证我的设置是否正常。有时它会中断,因为一个包被重新安装在具有相同版本号的先前版本上,并且依赖于它的包需要重新安装。当这种情况发生时,我cabal install
再次损坏了包裹。
我还使用以下程序来验证我的设置不包含两个具有相同版本的包:
import Data.List (sort)
import Data.Maybe (fromJust)
import System.IO (hGetContents)
import System.Process (CreateProcess (std_out), StdStream (CreatePipe), createProcess, shell)
main :: IO ()
main = do
pkgListRaw <-
createProcess (shell "ghc-pkg list") { std_out = CreatePipe }
>>= hGetContents . fromJust . sndOfFourTup
let pkgListSorted = sort . filter (not . null) $ lines pkgListRaw
putStrLn .
unlines . map (dropWhile (== ' ') . fst) .
filter (uncurry (==)) . zip pkgListSorted $ tail pkgListSorted
where
sndOfFourTup (_, x, _, _) = x
我cabal install
编辑了hlint
, yesod
, haddock
, HDBC-mysql
,hakyll
和其他软件包,然后我cabal install
一次又一次地编辑了前面的列表,直到我的设置达到“稳定状态”,在这种状态下cabal install
不会重新安装任何这些。
我验证了我正在处理的我自己的程序现在可以编译和工作。现在一切似乎都很好
笔记:
- 我无法让 Haskell Platform 2010.1.0.1 工作。在我升级到 GHC 6.12.3 后,事情才对我有用。具有讽刺意味的是(?),这违背了 GHC 下载页面上的建议:
停止!
对于大多数用户,我们建议安装 Haskell 平台而不是 GHC。当前的 Haskell 平台版本包括最近的 GHC 版本以及一些其他工具(例如 cabal),以及一组已知可以协同工作的更大的库。
这种解决方法也可能在未来的某个时候中断。我想这可能会在几个月内发生。像这样的核心库random
将得到更新,然后依赖性问题将再次开始解决。然后我/你将不得不花时间修复我们的设置。也许那时它需要升级到更新的 GHC。但是谁知道呢,也许它会是一个较旧的版本,随着 hackage 包的更新以解决依赖相关的问题,它会变得稳定。作为对您的服务,我会在时机成熟时更新这个问题和答案。(假设其他人也有这个问题。到目前为止,我验证了 Simon Marlow 和 Peaker 也面临这个问题)
知道您的 Haskell 设置已损坏的方法(如果其中任何一个为真,则设置已损坏):
- 没有任何效果
ghc-pkg check
说它坏了
- 我在上面这个答案中输入的源代码的短程序发现您安装了两次完全相同版本的软件包
cabal update
然后循环cabal install
我上面写的包列表,或者另一个列表(最好是一个有很多依赖项的大列表)。如果您从未达到稳定状态(循环的迭代总是会重新安装某些东西),那么您的设置就会被破坏。警告:此步骤可能会破坏您当前正常运行的 Haskell 设置。如果您非常好奇或愿意在设置中断后修复设置(这个过程可能很耗时),请执行此操作
我想知道您的设置是否损坏或正常工作。这可以帮助我。例如,如果我们发现 GHC 6.10 设置工作正常,I/U 可以在向某人推荐试用 Haskell 等时向人们推荐这些设置。
我希望这可以帮助其他面临相同或类似问题的人。非常感谢西蒙·马洛和约翰!