5

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
kronn
  • 925
  • 11
  • 31
Stephane Rolland
  • 38,876
  • 35
  • 121
  • 169
  • 1
    What does `stack --version` say ? – Sibi Dec 24 '17 at 17:02
  • @Sibi I have edited and added the output of the `stack --version` command – Stephane Rolland Dec 24 '17 at 17:26
  • 1
    Okay, so the problem is that you still have the old version of nix in your path. I don't think the `stack upgrade` will work in Nix OS. You have to install the newest version of Stack using nix package manager globally. – Sibi Dec 24 '17 at 17:43
  • In general, you need to make sure that `which stack` refers to the location of the binary installed by `stack upgrade`, for instance by making `~/.local/bin` appear earlier in your `$PATH`. – Rein Henrichs Dec 25 '17 at 01:45
  • 1
    Try `stack --nix build` it might work. I don't know why, if anyone know please answer my [question](https://stackoverflow.com/questions/46090460/what-is-reason-not-to-use-stack-nix-when-i-using-nix). Also try [this](https://stackoverflow.com/questions/46861022/generating-a-nix-package-from-a-stack-project/47110522#47110522) method. – wizzup Dec 25 '17 at 10:06
  • @wizzup thanks for the suggestion. However none of `stack --nix init` , `stack --nix build` or `stack --nix setup` works in my case, the output is still the same error about the flag name. I do think I have to get nixos install a more recent version of stack, but I still don't know how to do that for now. – Stephane Rolland Dec 25 '17 at 22:27

2 Answers2

2

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
Stephane Rolland
  • 38,876
  • 35
  • 121
  • 169
1

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).

nh2
  • 24,526
  • 11
  • 79
  • 128
  • I think in the `nix-channel --add ...` command, you should use `nixos-unstable` instead of `unstable` i.e. `https://nixos.org/channels/nixos-unstable` . Otherwise it did not work for me. – Stephane Rolland Jan 10 '18 at 11:32
  • @StephaneRolland What does `it did not work` mean, can you post an error? At least theoretically, any label for the channel should do as long as you use the same lebal in the argument to `nix-env`. – nh2 Jan 10 '18 at 15:11
  • when launching `nix-channel --update` I had something like "unable to download...". I try to get the entire error message and post it here. – Stephane Rolland Jan 10 '18 at 18:16
  • as you asked, I have tried again with `https://nixos.org/channels/unstable` instead of `https://nixos.org/channels/nixos-unstable` and as soon as I do `nix-@nh2 channel --update` the error message is kind of almost explicit: `error: unable to download 'https://nixos.org/channels/unstable/nixexprs.tar.bz2` etc... As I said I no longer have an error if instead of `unstable` I use `nixos-unstable`. I think you should check by yourself and edit your answer accordingly. – Stephane Rolland Jan 11 '18 at 10:32
  • 1
    @StephaneRolland Ah, you are right, I had a part of the URL cut off. I have corrected it to `nix-channel --add 'https://nixos.org/channels/nixpkgs-unstable' unstable`. I thought you were referring to the _label_ (last word in this command), which can really be anything you like, but you were referring to the URL itself. I have edited the answer to fix that. Thanks for clarifying. – nh2 Feb 01 '18 at 13:59