[Haskell-cafe] technical thoughts on stack

Sven Panne svenpanne at gmail.com
Tue Sep 13 20:24:43 UTC 2016


2016-09-13 21:07 GMT+02:00 Theodore Lief Gannon <tanuki at gmail.com>:

> Stack *does* allow direct interaction with GHC:
>
> stack exec -- ghc version
>
> Granted this lacks a bit in brevity, but if you want to issue multiple
> commands from "inside" stack's private environment, you can also just do
> this:
>
> stack exec sh
>

Another option is setting up simple 2-liners like

   #!/bin/sh
   stack --resolver=lts-6.17 exec ghc -- "$@"

and put them under some sensible name (e.g. ghc-7.10.3) into one's ~/bin,
same for ghci. This way you can still keep things nicely separated and in a
known state, but still have access to several versions without typing
overhead. There are still a few tiny annoying things, though:

   * There's the "Run from outside a project blah blah" line, and I don't
see a way to disable that. This is only a cosmetic issue, but still...

   * On Windows under  a MinGW bash you get a a warning for ghci:

        $ stack --resolver=nightly-2016-07-01 exec ghci -- --version
        Run from outside a project, using implicit global project config
        WARNING: GHCi invoked via 'ghci.exe' in *nix-like shells
(cygwin-bash, in particular)
                 doesn't handle Ctrl-C well; use the 'ghcii.sh' shell
wrapper instead
        The Glorious Glasgow Haskell Compilation System, version 8.0.1

     But using ghcii.sh through stack doesn't work:

        $ stack --resolver=nightly-2016-07-01 exec ghcii.sh -- --version
        Run from outside a project, using implicit global project config

D:\Benutzer\Sven\AppData\Local\Programs\stack\x86_64-windows\ghc-8.0.1\bin\ghcii.sh:
createProcess: invalid argument (Exec format error)

   * I've seen variations of "Did not find .cabal file for
servant-yaml-0.1.0.0 with Git SHA of 71c0a55d...", too, and I don't have a
clue what stack is trying to tell me, either. The message should either be
suppressed or improved. As it is, it's useless for the end-user.

   * From time to time I'd like to remove old stuff which has been
installed by stack, e.g. "everything not belonging to the latest LTS" or
"everything from nightly-2016-07-01". I can easily blow away the whole
~/.stack directory and re-download/compile only the new stuff I need, but
there must be a better way, I hope. This kind of housekeeping is really
necessary when you play around a bit with various versions (resulting in
tons of GB in ~/.stack) and your relatively small laptop HDD is getting a
bit full

In a nutshell: I'm quite happy with stack, but it still needs some
polishing. When this is done, it can probably make both the "ad hoc" camp
and the "multi-GHC-version project/library writer" camp happy.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20160913/8bd31dc2/attachment.html>


More information about the Haskell-Cafe mailing list