用急速,二进制和zip存档逃离阴谋地狱

时间:2014-06-21 02:12:29

标签: javascript haskell cabal

我想使用haste-compiler包来执行haskell-to-javascript的事情:

jsnavely@beefy:~/project$ cabal install haste-compiler
Resolving dependencies...
...
Configuring zip-archive-0.2.3...
Building zip-archive-0.2.3...
Preprocessing library zip-archive-0.2.3...
[1 of 1] Compiling Codec.Archive.Zip ( src/Codec/Archive/Zip.hs, dist/build/Codec/Archive/Zip.o )

src/Codec/Archive/Zip.hs:163:27: Not in scope: `decodeOrFail'
Failed to install zip-archive-0.2.3
cabal: Error: some packages failed to install:
haste-compiler-0.3 depends on zip-archive-0.2.3 which failed to install.
zip-archive-0.2.3 failed during the building phase. The exception was:
ExitFailure 1

我注意到有一个较新版本的zip-archive将二进制版本提升为> = 0.7,它提供decodeOrFail功能。所以我尝试检查haste-compiler repo并将zip-archive版本提升到新的zip-archive 0.2.3.2。但这没有帮助:

jsnavely@beefy:~/project/haste-compiler$ cabal install
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: haste-compiler-0.3 (user goal)
trying: zip-archive-0.2.3.2/installed-208... (dependency of
haste-compiler-0.3)
trying: ghc-7.6.3/installed-0d1... (dependency of haste-compiler-0.3)
next goal: bin-package-db (dependency of ghc-7.6.3/installed-0d1...)
rejecting: bin-package-db-0.0.0.0/installed-837... (conflict: zip-archive =>
binary==0.7.1.0/installed-961..., bin-package-db =>
binary==0.5.1.1/installed-5b8...)
Dependency tree exhaustively searched.

我还尝试手动安装zip-archive和binary,并在沙盒中完成所有这些操作。我不知道该怎么做 - 我真的很想用良好类型的haskelly goodness替换我的所有javascript。我在我的macbookpro和我的linux盒子上遇到同样的问题,两者都运行最新的haskell-platform,ghc version 7.6.3

1 个答案:

答案 0 :(得分:8)

你的依赖树看起来像这样:

                      ┌────────────────────┐
            ┌─────────┤ haste─compiler─0.3 │
            │ depends └─────────────────┬──┘
            V                           │
      ┌───────────┐                     │ depends
      │ ghc─7.6.3 │                     │
      └─────┬─────┘                     V                   
            │ depends                ┌─────────────────────┐
            V                        │ zip─archive─0.2.3.2 │
┌────────────────────────┐           └───────────┬─────────┘
│ bin─package─db─0.0.0.0 │                       │
└───────────┬────────────┘                       │ depends
            │ depends                            │
            V                                    V
    ┌────────────────┐  conflicts with  ┌────────────────┐
    │ binary─0.5.1.1 │<────────────────>│ binary─0.7.1.0 │
    └────────────────┘                  └────────────────┘

由于您可能无法重新安装GHC,因此它及其下方的所有内容都已为我们“修复”,我们将不得不尝试更改zip-archive-0.2.3.2binary-0.7.1.0。让我们看看haste-compiler-0.3

的约束
zip-archive

因此它根本没有指定版本。任何会做的。如果我们查看以前版本的zip-archive,我们会发现版本0.2.2.1是最早版本,其binary约束与已构建在Hackage上的已安装binary-0.5.1.1兼容。所以这是你应该如何解决它:

  1. 按顺序取消注册zip-archive-0.2.3.2binary-0.7.1.0

    % ghc-pkg unregister zip-archive-0.2.3.2
    % ghc-pkg unregister binary-0.7.1.0
    
  2. 从GHC库目录中删除这两个包。这取决于您的安装,但请查看~/.ghc~/.cabal~/Library/Haskell以查找lib目录(可能在一个或两个子目录中),看看您是否可以在某处找到包裹。

  3. 使用haste-compiler-0.3版本的约束安装zip-archive

    % cabal install --constraint='zip-archive==0.2.2.1' haste-compiler==0.3
    
  4. 这应该有用,但我自己没试过,所以可能会出错。