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

一曲冷凌霜 提交于 2019-12-10 13:34:10

问题


With a bare "hello world" project generated by

stack new myproject simple

whenever I run stack setup, stack init or stack build I have the following error all the time:

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\""

I saw some guys talk about the issue, and argue about whether it is accepted or not to have two sequential - in a flag name like in "bytestring--lt-0...", that it is the fault of stack or cassava or cabal etc...

But someone constructively suggests a workaround with

stack upgrade

However even after running stack upgrade command, I still have the issue. And I cannot build the "hello world" program.

Any idea how to fix this or workaround ?

I use NixOs, if there are solutions that works best with NixOs.

This is the output to 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

回答1:


For bypassing the issue with the bytestring--lt flag:

Use --nix and --resolver with a former lts version for stack commands:

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

It is not necessary, but so as to install a more recent version of stack:

First, we have to add the nixos-unstable channel so as to pick a more recent version of stack from it:

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

Then, update the nixos configuration.nix file so as to install the unstable version of stack:

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

and rebuild the system:

$ nixos-rebuild reboot



回答2:


Short answer: Upgrade stack using:

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

Long answer:

The issue here is, as you have correctly identified, the double -- in the flag you mentioned. See this issue for details.

The recommendations you have got, upgrading stack, are good.

The only thing you seem to be missing is how to upgrade stack on your NixOS.

Here's how to do it if you use 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):
  ...

In the above, I have added the unstable NixOS release, and then I fetched its contents and installed stack from it using nix-env -iA unstable.stack.

That gets me stack-1.6.3 as of writing (as opposed from release-17.09, which has stack-1.5.1).



来源:https://stackoverflow.com/questions/47962377/cannot-build-a-hello-world-program-with-stack-because-of-flag-bytestring-lt-0-1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!