首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安装类似于“`hackage cli`”的Haskell程序

安装类似于“`hackage cli`”的Haskell程序
EN

Stack Overflow用户
提问于 2022-02-12 13:08:01
回答 1查看 143关注 0票数 0

我会安装这个程序

https://github.com/hackage-trustees/hackage-cli

这样做的简单方法是什么?

如果我试图在本地构建它

代码语言:javascript
复制
> cabal --version 
cabal-install version 3.4.1.0 
compiled using version 3.4.1.0 of the Cabal library)

我得到了

代码语言:javascript
复制
 ❯ cabal v1-build
Resolving dependencies...
Warning: solver failed to find a solution:
Could not resolve dependencies:
[__0] trying: hackage-cli-0.1.0.0 (user goal)
[__1] next goal: base (dependency of hackage-cli)
[__1] rejecting: base-4.15.1.0/installed-4.15.1.0 (conflict: hackage-cli =>
base>=4.10.0.0 && <4.13)
[__1] fail (backjumping, conflict set: base, hackage-cli)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: hackage-cli, base
Trying configure anyway.
Configuring hackage-cli-0.1.0.0...
cabal: Encountered missing or private dependencies:
Cabal >=2.4.1.0 && <2.5,
aeson >=1.4.2.0 && <2.1,
base >=4.10.0.0 && <4.13,
http-io-streams >=0.1.0.0 && <0.2,
io-streams >=1.5.0.1 && <1.6,
lens >=4.17 && <5.2,
netrc >=0.2.0.0 && <0.3,
optparse-applicative >=0.14 && <0.17,
process-extras >=0.7.4 && <0.8,
semigroups >=0.18.3 && <0.21,
stringsearch >=0.3.6 && <0.4,
tagsoup >=0.14 && <0.15,
tar >=0.5 && <0.6,
unordered-containers >=0.2.7 && <0.3,
zlib >=0.6.1 && <0.7

代码语言:javascript
复制
❯ cabal v2-build
Resolving dependencies...
cabal: Could not resolve dependencies:
[__0] trying: hackage-cli-0.1.0.0 (user goal)
[__1] next goal: base (dependency of hackage-cli)
[__1] rejecting: base-4.15.1.0/installed-4.15.1.0 (conflict: hackage-cli =>
base>=4.10.0.0 && <4.13)
[__1] skipping: base-4.16.0.0, base-4.15.1.0, base-4.15.0.0, base-4.14.3.0,
base-4.14.2.0, base-4.14.1.0, base-4.14.0.0, base-4.13.0.0 (has the same
characteristics that caused the previous version to fail: excluded by
constraint '>=4.10.0.0 && <4.13' from 'hackage-cli')
[__1] rejecting: base-4.12.0.0, base-4.11.1.0, base-4.11.0.0, base-4.10.1.0,
base-4.10.0.0, base-4.9.1.0, base-4.9.0.0, base-4.8.2.0, base-4.8.1.0,
base-4.8.0.0, base-4.7.0.2, base-4.7.0.1, base-4.7.0.0, base-4.6.0.1,
base-4.6.0.0, base-4.5.1.0, base-4.5.0.0, base-4.4.1.0, base-4.4.0.0,
base-4.3.1.0, base-4.3.0.0, base-4.2.0.2, base-4.2.0.1, base-4.2.0.0,
base-4.1.0.0, base-4.0.0.0, base-3.0.3.2, base-3.0.3.1 (constraint from
non-upgradeable package requires installed instance)
[__1] fail (backjumping, conflict set: base, hackage-cli)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: base, hackage-cli

代码语言:javascript
复制
❯ stack init
Looking for .cabal or package.yaml files to use to init the project.
Using cabal packages:
- ./
- fixtures/

Multiple .cabal files found in directory /Users/nrolland/clones/hackage-cli/fixtures/:
- SVGFonts.2.cabal
- SVGFonts.0.cabal
- SVGFonts.1.cabal
- deepseq.1.cabal
- tree-diff.1.cabal
- semigroups.2.cabal
- semigroups.0.cabal
- tree-diff.0.cabal
- deepseq.0.cabal
- semigroups.1.cabal
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-15 00:22:09

简短回答

下面是一个解决方案。或者,您也可以从以下位置克隆:

代码语言:javascript
复制
https://github.com/kabuhr/hackage-cli

以获得stack build-ready版本。请注意,您可能需要apt install libbrotli-dev或类似的在stack build之前。

长答案

在这里,stack initfixtures子目录中的一些额外的.cabal文件愚弄了。您可以通过运行stack init --ignore-subdirs来解决这个问题。这最终选择了解析器lts-14.27,但是由于http-io-streams不在堆栈中,所以失败了:

代码语言:javascript
复制
Selected resolver: https://raw.githubusercontent.com/
        commercialhaskell/stackage-snapshots/master/lts/14/27.yaml
Resolver 'https://raw.githubusercontent.com/commercialhaskell/
        stackage-snapshots/master/lts/14/27.yaml' does not have all
        the packages to match your requirements.
    http-io-streams not found
        - hackage-cli requires ^>=0.1.0.0

你可以跑:

代码语言:javascript
复制
stack init --resolver lts-14.27 --ignore-subdirs --omit-packages

生成一个stack.yaml,然后为http-io-streams添加一些extra-deps以及它所依赖的任何内容。经过一些小打小闹之后,我想出了下面的stack.yaml

代码语言:javascript
复制
resolver: lts-14.27

packages:
- .

extra-deps:
- http-io-streams-0.1.2.0
- brotli-streams-0.0.0.0
- brotli-0.0.0.0

还需要一个额外的修补程序,因为支持2.0.0.0之前版本的aeson的代码中断了。应用以下修补程序:

代码语言:javascript
复制
diff --git a/src/IndexShaSum.hs b/src/IndexShaSum.hs
index 0296dff..bdfc4df 100644
--- a/src/IndexShaSum.hs
+++ b/src/IndexShaSum.hs
@@ -35,14 +35,15 @@ import           Data.Semigroup         ((<>))
 #if MIN_VERSION_aeson(2,0,0)
 import qualified Data.Aeson.Key         as Key
 import qualified Data.Aeson.KeyMap      as KeyMap
+type Key = J.Key
 
-keyToText :: J.Key -> Text
+keyToText :: Key -> Text
 keyToText = Key.toText
 #else
 import qualified Data.HashMap.Strict    as KeyMap
 type Key = Text
 
-keyToText :: J.Key -> Text
+keyToText :: Key -> Text
 keyToText = id
 #endif
 
@@ -139,7 +140,7 @@ decodePkgJsonFile bs = do
         go2 m = forM (KeyMap.toList m) $ \(k,v) -> do
             J.withObject ".targets{}" (go3 k) v
 
-        go3 :: J.Key -> J.Object -> J.Parser (ByteString, ByteString)
+        go3 :: Key -> J.Object -> J.Parser (ByteString, ByteString)
         go3 k o = do
             hashes <- o J..: "hashes"
             sh256 <- hashes J..: "sha256"

应用了该修补程序,并且stack.yaml已经就位,您应该能够运行stack build了。如果您在构建包brotli时出错,您可能需要安装brotli库的开发文件(例如,Debian版本上的apt install libbrotli-dev )。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71092123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档