问题
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