由于标志 bytestring--lt-0_10_4,无法使用 Stack 构建 hello world 程序

Cannot build a hello world program with Stack because of flag bytestring--lt-0_10_4

使用

生成的裸 "hello world" 项目
stack new myproject simple

每当我 运行 stack setupstack initstack build 我总是有以下错误:

Downloading lts-10.0 build plan Downloaded lts-10.0 build plan.
AesonException "Error in $.packages.cassava.constraints.flags['bytestring--lt-0_10_4']: Invalid flag name: \"bytestring--lt-0_10_4\""

我看到一些人在谈论这个问题,争论是否接受在标志名称中有两个连续的 -,如 "bytestring--lt-0...",这是堆栈或木薯或阴谋集团等...

但是有人建设性地提出了解决方法

stack upgrade

然而,即使在 运行ning stack upgrade 命令之后,我仍然有问题。而且我无法构建 "hello world" 程序。

知道如何解决这个问题或解决方法吗?

我使用 NixOs,如果有最适合 NixOs 的解决方案。

这是 stack --version 的输出:

Version 1.5.1 x86_64
Compiled with:
- Cabal-1.24.2.0
- Glob-0.8.0
- HUnit-1.5.0.0
- MonadRandom-0.5.1
- QuickCheck-2.9.2
- SHA-1.6.4.2
- StateVar-1.1.0.4
- aeson-1.1.2.0
- aeson-compat-0.3.6
- annotated-wl-pprint-0.7.0
- ansi-terminal-0.6.3.1
- ansi-wl-pprint-0.6.7.3
- array-0.5.1.1
- asn1-encoding-0.9.5
- asn1-parse-0.9.4
- asn1-types-0.3.2
- async-2.1.1.1
- attoparsec-0.13.1.0
- attoparsec-iso8601-1.0.0.0
- auto-update-0.1.4
- base-4.9.1.0
- base-compat-0.9.3
- base-orphans-0.6
- base16-bytestring-0.1.1.6
- base64-bytestring-1.0.0.1
- bifunctors-5.4.2
- binary-0.8.3.0
- binary-tagged-0.1.4.2
- bitarray-0.0.1.1
- blaze-builder-0.4.0.2
- blaze-html-0.9.0.1
- blaze-markup-0.8.0.0
- byteable-0.1.1
- bytestring-0.10.8.1
- call-stack-0.1.0
- case-insensitive-1.2.0.10
- cereal-0.5.4.0
- clock-0.7.2
- comonad-5.0.2
- conduit-1.2.11
- conduit-extra-1.1.16
- connection-0.2.8
- constraints-0.9.1
- containers-0.5.7.1
- contravariant-1.4
- cookie-0.4.2.1
- cryptohash-0.11.9
- cryptohash-sha256-0.11.100.1
- cryptonite-0.23
- cryptonite-conduit-0.2.0
- data-default-class-0.1.2.0
- deepseq-1.4.2.0
- digest-0.0.1.2
- directory-1.3.0.0
- distributive-0.5.3
- dlist-0.8.0.3
- easy-file-0.2.1
- echo-0.1.3
- ed25519-0.0.5.0
- either-4.4.1.1
- errors-2.2.1
- exceptions-0.8.3
- extra-1.5.3
- fail-4.9.0.0
- fast-logger-2.4.10
- file-embed-0.0.10
- filelock-0.1.1.2
- filepath-1.4.1.1
- foundation-0.0.13
- free-4.12.4
- fsnotify-0.2.1.1
- generic-deriving-1.11.2
- generics-sop-0.3.1.0
- ghc-boot-th-8.0.2
- ghc-prim-0.5.0.0
- gitrev-1.3.1
- hackage-security-0.5.2.2
- hashable-1.2.6.1
- hastache-0.6.1
- hinotify-0.3.9
- hourglass-0.2.10
- hpack-0.18.1
- hpc-0.6.0.3
- hspec-2.4.4
- hspec-core-2.4.4
- hspec-discover-2.4.4
- hspec-expectations-0.8.2
- hspec-smallcheck-0.4.2
- http-api-data-0.3.7.1
- http-client-0.5.7.0
- http-client-tls-0.3.5.1
- http-conduit-2.2.3.2
- http-types-0.9.1
- ieee754-0.8.0
- integer-gmp-1.0.0.1
- integer-logarithms-1.0.2
- lifted-async-0.9.3
- lifted-base-0.2.3.11
- logict-0.6.0.2
- memory-0.14.6
- microlens-0.4.8.1
- microlens-mtl-0.1.11.0
- microlens-th-0.4.1.1
- mime-types-0.1.0.7
- mintty-0.1.1
- mmorph-1.0.9
- monad-control-1.0.2.2
- monad-logger-0.3.25
- monad-loops-0.4.3
- monad-unlift-0.2.0
- mono-traversable-1.0.2.1
- mtl-2.2.1
- nats-1.1.1
- network-2.6.3.2
- network-uri-2.6.1.0
- old-locale-1.0.0.7
- old-time-1.1.0.3
- open-browser-0.2.1.0
- optparse-applicative-0.13.2.0
- optparse-simple-0.0.3
- parsec-3.1.11
- path-0.5.13
- path-io-1.2.2
- path-pieces-0.2.1
- pem-0.2.2
- persistent-2.7.0
- persistent-sqlite-2.6.2
- persistent-template-2.5.2
- pid1-0.1.2.0
- prelude-extras-0.4.0.3
- pretty-1.1.3.3
- primitive-0.6.2.0
- process-1.4.3.0
- profunctors-5.2.1
- project-template-0.2.0
- quickcheck-io-0.2.0
- random-1.1
- regex-applicative-0.3.3
- regex-applicative-text-0.1.0.1
- resource-pool-0.2.3.2
- resourcet-1.1.9
- retry-0.7.4.2
- rts-1.0
- safe-0.3.15
- safe-exceptions-0.1.6.0
- scientific-0.3.5.2
- semigroupoids-5.2.1
- semigroups-0.18.3
- setenv-0.1.1.3
- silently-1.2.5
- smallcheck-1.1.2
- socks-0.5.5
- split-0.2.3.2
- stm-2.4.4.1
- stm-chans-3.0.0.4
- store-0.4.3.2
- store-core-0.4.1
- streaming-commons-0.1.17
- syb-0.7
- tagged-0.8.5
- tar-0.5.0.3
- template-haskell-2.11.1.0
- temporary-1.2.1.1
- text-1.2.2.2
- text-binary-0.2.1.1
- text-metrics-0.3.0
- tf-random-0.5
- th-expand-syns-0.4.3.0
- th-lift-0.7.7
- th-lift-instances-0.1.11
- th-orphans-0.13.4
- th-reify-many-0.1.8
- th-utilities-0.2.0.1
- time-1.6.0.1
- time-locale-compat-0.1.1.3
- tls-1.3.11
- transformers-0.5.2.0
- transformers-base-0.4.4
- transformers-compat-0.5.1.4
- unexceptionalio-0.3.0
- unicode-transforms-0.3.3
- unix-2.7.2.1
- unix-compat-0.4.3.1
- unix-time-0.3.7
- unordered-containers-0.2.8.0
- uri-bytestring-0.2.3.3
- uuid-types-1.0.3
- vector-0.12.0.1
- vector-algorithms-0.7.0.1
- vector-binary-instances-0.2.3.5
- void-0.7.2
- x509-1.7.2
- x509-store-1.6.5
- x509-system-1.6.6
- x509-validation-1.6.9
- yaml-0.8.23.3
- zip-archive-0.3.1.1
- zlib-0.6.1.2

简答:升级stack使用:

nix-channel --add 'https://nixos.org/channels/unstable' unstable
nix-channel --update
nix-env -iA unstable.stack

长答案:

正如您正确识别的那样,这里的问题是您提到的标志中的双 --。有关详细信息,请参阅 this issue

你得到的建议,升级stack,很好。

您似乎唯一缺少的是如何在您的 NixOS 上升级 stack

如果您使用 nix-channels,请按以下步骤操作:

% nix-channel --list
nixpkgs https://nixos.org/channels/nixos-17.09

% nix-channel --add 'https://nixos.org/channels/nixpkgs-unstable' unstable

% nix-channel --list
nixpkgs https://nixos.org/channels/nixos-17.09
unstable https://nixos.org/channels/nixpkgs-unstable

% nix-channel --update
downloading Nix expressions from ‘https://d3g5gsiof5omrk.cloudfront.net/nixos/17.09/nixos-17.09.2476.53e6d671a96/nixexprs.tar.xz’...
downloading ‘https://d3g5gsiof5omrk.cloudfront.net/nixos/17.09/nixos-17.09.2476.53e6d671a96/nixexprs.tar.xz’... [0/0 KiB, 0.0 KiB/s]
downloading Nix expressions from ‘https://d3g5gsiof5omrk.cloudfront.net/nixpkgs/nixpkgs-18.03pre123609.93829f1b031/nixexprs.tar.xz’...
downloading ‘https://d3g5gsiof5omrk.cloudfront.net/nixpkgs/nixpkgs-18.03pre123609.93829f1b031/nixexprs.tar.xz’... [0/0 KiB, 0.0 KiB/s]
unpacking channels...
created 7 symlinks in user environment

% nix-env -iA unstable.stack
installing ‘stack-1.6.3’
these derivations will be built:
  /nix/store/d0laffx9yarcb6r243pfcd2xyvmxylgn-remove-references-to.drv
  /nix/store/6da8kmc6pdxzgmi4bpahwckl8y6ify1z-stack-1.6.3.drv
these paths will be fetched (218.74 MiB download, 2452.84 MiB unpacked):
  ...

在上面,我添加了 unstable NixOS 版本,然后我使用 nix-env -iA unstable.stack.

获取它的内容并从中安装堆栈

写作时我 stack-1.6.3(与 release-17.09 相对,后者有 stack-1.5.1)。

绕过 bytestring--lt 标志的问题:

--nix--resolver 与以前的 lts 版本一起用于堆栈命令:

stack new myproject --nix --resolver lts-9.14
stack setup --nix --resolver lts-9.14
stack build --nix --resolver lts-9.14

不是必需的,但为了安装更新版本的 stack:

首先,我们必须添加 nixos-unstable 通道,以便从中选择更新版本的堆栈:

nix-channel --add 'https://nixos.org/channels/nixos-unstable' unstable
nix-channel --update

然后,更新nixos configuration.nix文件以安装不稳定版本的堆栈:

{ config, pkgs, ... }:
  let
      unstable = import <unstable> {};
  in {
      environment.systemPackages = [ unstable.stack ];
}

并重建系统:

$ nixos-rebuild reboot