使用Stack安装Aeson包

5

为了使用Json,我想要安装Aeson包。

package.yaml文件中,我在dependencies:部分添加了-aeson ,然后出现了许多错误,但我在网上找不到相关信息,例如:"但这个GHC启动包已被修剪"。

我尝试理解这些错误,但我一个也不懂。例如,对于第一个错误,如果我运行命令stack ls dependencies,我会得到text 1.2.4.0,它与需要匹配的版本相符,那么为什么它不能工作呢?

有没有一种方法可以让Stack为我安装软件而不必编辑yaml文件然后遇到问题?(stack install似乎什么都没做)

完整的错误信息:

PS D:\Documents\Programming\Unity\Poging8_(catan)\HaskellServer> stack build

Error: While constructing the build plan, the following exceptions were encountered:

In the dependencies for aeson-1.4.7.1:
    text must match >=1.2.3.0 && <1.3, but this GHC boot package has been pruned (issue #4510); you need to add the
         package explicitly to extra-deps  (latest matching version is 1.2.4.0)
needed due to HaskellCatanServer-0.1.0.0 -> aeson-1.4.7.1

In the dependencies for attoparsec-0.13.2.4:
    text must match >=1.1.1.3, but this GHC boot package has been pruned (issue #4510); you need to add the package
         explicitly to extra-deps  (latest matching version is 1.2.4.0)
needed due to HaskellCatanServer-0.1.0.0 -> attoparsec-0.13.2.4

In the dependencies for ghc-boot-th-8.6.5:
    base-4.13.0.0 from stack configuration does not match >=4.7 && <4.13  (latest matching version is 4.12.0.0)
needed due to HaskellCatanServer-0.1.0.0 -> ghc-boot-th-8.6.5

In the dependencies for hashable-1.3.0.0:
    text must match >=0.12 && <1.3, but this GHC boot package has been pruned (issue #4510); you need to add the package
         explicitly to extra-deps  (latest matching version is 1.2.4.0)
needed due to HaskellCatanServer-0.1.0.0 -> hashable-1.3.0.0

In the dependencies for scientific-0.3.6.2:
    text must match >=0.8, but this GHC boot package has been pruned (issue #4510); you need to add the package
         explicitly to extra-deps  (latest matching version is 1.2.4.0)
needed due to HaskellCatanServer-0.1.0.0 -> scientific-0.3.6.2

In the dependencies for template-haskell-2.14.0.0:
    base-4.13.0.0 from stack configuration does not match >=4.9 && <4.13  (latest matching version is 4.12.0.0)
needed due to HaskellCatanServer-0.1.0.0 -> template-haskell-2.14.0.0

In the dependencies for time-1.8.0.4:
    base-4.13.0.0 from stack configuration does not match >=4.7 && <4.13  (latest matching version is 4.12.0.0)
needed due to HaskellCatanServer-0.1.0.0 -> time-1.8.0.4

In the dependencies for uuid-types-1.0.3:
    text must match >=1 && <1.3, but this GHC boot package has been pruned (issue #4510); you need to add the package
         explicitly to extra-deps  (latest matching version is 1.2.4.0)
needed due to HaskellCatanServer-0.1.0.0 -> uuid-types-1.0.3

Some different approaches to resolving this:

  * Build requires unattainable version of base. Since base is a part of GHC, you most likely need to use a different
    GHC version with the matching base.

Plan construction failed.

额外信息:

package.yaml文件中,我有以下依赖项:

- base >= 4.7 && < 5
- network
- bytestring
- aeson

我没有手动编辑过stack.yaml,我使用的是解析器lts-16.3和extra-deps:

- ghc-8.6.5@sha256:3591225289bdf8cf8f62b10f2aebc9ea3e25a15294545a5312a419e0317784f9,13976
- ghc-boot-8.6.5@sha256:8b608d2f36aad99a37a7d1b70319d43195128de6485b15fa7d4638b2942ce2a2,1772
- ghc-boot-th-8.6.5@sha256:c120f0d15944e770e2b698f5139f0003a86f9e25e5d1a7c6631e442129232748,1075
- ghci-8.6.5@sha256:886e52e6ab43b0de39fd5d92d8d1a5d7fac04c0f145c62b39baae04476208bd9,2126
- template-haskell-2.14.0.0@sha256:e3747ae9e2aeec160196706dd470b5fc4175678ec4136bcec9124534f67d83bc,1724
- time-1.8.0.4@sha256:3f6eddf238b828eb4f82683acce1c3afe64784f0d20114239b738c123316c85c,5494

stack ls dependencies

Win32 2.6.1.0
aeson 1.4.7.1
array 0.5.4.0
attoparsec 0.13.2.4
base 4.13.0.0
base-compat 0.11.1
base-compat-batteries 0.11.1
base-orphans 0.8.2
binary 0.8.7.0
bytestring 0.10.10.0
containers 0.6.2.1
deepseq 1.4.4.0
dlist 0.8.0.8
filepath 1.4.2.1
ghc-boot-th 8.6.5
ghc-prim 0.5.3
hashable 1.3.0.0
integer-gmp 1.0.2.0
integer-logarithms 1.0.3
network 3.1.1.1
pretty 1.1.3.6
primitive 0.7.0.1
random 1.1
rts 1.0
scientific 0.3.6.2
tagged 0.8.6
template-haskell 2.14.0.0
text 1.2.4.0
th-abstraction 0.3.2.0
time 1.8.0.4
time-compat 1.9.3
transformers 0.5.6.2
unordered-containers 0.2.10.0
uuid-types 1.0.3
vector 0.12.1.2

2
尝试移除所有这些额外的依赖项。 - arrowd
@arrowd 好像很简单。如果你知道为什么这有帮助,也许你可以写一个答案?现在看起来就像魔法一样,因为我一开始并没有编辑那个文件。 - The Coding Wombat
1
这就是为什么我无法写出答案的原因。通常,stack.yaml 是一个非常简单的文件,所以我也不知道所有这些限制都来自哪里。作为经验法则,尽量将所有额外的东西远离 stack.yaml - arrowd
1个回答

5
因此,您的问题是lts和extra-deps版本之间不匹配。正如@arrowd所评论的那样,解决方案是删除extra-deps部分...让我详细解释一下原因:
  • 每个 lts(也称为 snapshot)都有一个关联的 GHC 版本。例如在lts-16.3中,这样的版本是 ghc-8.8.3,您可以在链接的文档中查看。

  • 当您在package.yaml中编写依赖项时,stack将使用所选lts中定义的版本,并从stackage服务器下载它。例如,在链接的文档中,您可以搜索aeson包。在lts-16.3中使用的版本是aeson-1.4.7.1

  • 所有lts中的软件包版本都保证能够很好地协同工作,没有依赖问题。(我认为在 stack 网站上有一些因系统软件包而有的例外情况,但我不太确定)

  • 问题出现在extra-deps上。它们直接从hackage服务器下载,没有依赖兼容性的保证。在您的情况下,一个额外的依赖项是ghc-8.6.5。显然,快照中定义的编译器版本ghc-8.8.3与您想要的额外依赖项ghc-8.6.5之间存在依赖问题。

希望它能澄清一些“stack”术语。

1
谢谢您的解释。也许您可以将@arrowd在评论中提到的解决方案添加到答案中,这样答案就既是解决方案的解释,也是解决方案本身。 - The Coding Wombat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接