我会安装这个程序
https://github.com/hackage-trustees/hackage-cli
这样做的简单方法是什么?
如果我试图在本地构建它
> cabal --version
cabal-install version 3.4.1.0
compiled using version 3.4.1.0 of the Cabal library)我得到了
❯ 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。
❯ 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。
❯ 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发布于 2022-02-15 00:22:09
简短回答
下面是一个解决方案。或者,您也可以从以下位置克隆:
https://github.com/kabuhr/hackage-cli以获得stack build-ready版本。请注意,您可能需要apt install libbrotli-dev或类似的在stack build之前。
长答案
在这里,stack init被fixtures子目录中的一些额外的.cabal文件愚弄了。您可以通过运行stack init --ignore-subdirs来解决这个问题。这最终选择了解析器lts-14.27,但是由于http-io-streams不在堆栈中,所以失败了:
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你可以跑:
stack init --resolver lts-14.27 --ignore-subdirs --omit-packages生成一个stack.yaml,然后为http-io-streams添加一些extra-deps以及它所依赖的任何内容。经过一些小打小闹之后,我想出了下面的stack.yaml
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的代码中断了。应用以下修补程序:
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 )。
https://stackoverflow.com/questions/71092123
复制相似问题