Cabal woes

Iavor Diatchki iavor.diatchki at gmail.com
Mon Apr 15 22:38:45 UTC 2019


Hello,

in case it is useful, here is how I think about what's happening with
cabal.   At present, `cabal-install` supports two different modes of
operation: the old style (aka `v1`) and the new style (aka `v2`) and---at
least for me---the two require a slightly different mental model of what is
going on.

In the old model, there is a user package database, and users would use
"cabal install" to install libraries their manually (e.g., using
`cabal-install`).   Later, when building various artifacts cabal would
prefer using the packages installed in the user's database.  This database
supported having multiple versions of a package, but NOT multiple builds of
the same version of a package (e.g., against different dependencies).  As a
result, builds would sometimes fail, because the dependencies of packages
would clash with each other (the unfortunate "cabal hell").

With the new model, there is still a "user" level location where libraries
are installed, but it is not really directly manipulated by the
user---rather it acts as more of a "cache" containing all versions of all
libraries every built and---crucially---it supports having multiple builds
of the same version of a package against different dependencies.   When
users build an artifact using the new style (aka "v2"), cabal automatically
checks if a suitable version of the library is already built in its cache,
and if not it adds it there.

The important difference between the two (at least in my mind) is that with
the new style, you never just install a library on its own.  Rather, you
install it as a part of a project, so Cabal can compute which version it
should install so that you get a version compatible with the rest of the
project.   Since in this model you never really install libraries directly,
the `install` command defaults to installing executables, which is what the
first error is trying to say.

So, if you want to try out `hspec` with the `v2` style of Cabal, you'd just
add it as a dependencies in the `cabal` file of your project, and then use
`cabal v2-build` to build the project, without having to install it
manually first.

I hope this helps,
-Iavor



On Mon, Apr 15, 2019 at 3:01 PM Simon Peyton Jones via ghc-devs <
ghc-devs at haskell.org> wrote:

> Thanks.  But alas I have no clue about whether I want a v1-install or a
> v2-install, nor how to achieve them if I knew what they were.  I just want
> to install ‘hspec’ so that I can use it when compiling a program.  How
> would I do that?
>
>
>
> The instructions here https://wiki.haskell.org/Cabal-Install just say
> “cabal install hspec” which is what I tried.  Those instructions are
> pointed to from here
> https://wiki.haskell.org/Cabal/How_to_install_a_Cabal_package, which in
> turn are pointed to from the main Cabal home page
> https://www.haskell.org/cabal/.
>
>
>
> I must be missing something.
>
>
>
> Simon
>
>
>
> *From:* Brandon Allbery <allbery.b at gmail.com>
> *Sent:* 15 April 2019 22:54
> *To:* Simon Peyton Jones <simonpj at microsoft.com>
> *Cc:* ghc-devs at haskell.org
> *Subject:* Re: Cabal woes
>
>
>
> I think you wanted v1-install to install a library into the user package
> database, since your cabal is 3.x and the v2-* commands are now the default
> (that is, you did what used to be cabal new-install or cabal v2-install).
>
>
>
> On Mon, Apr 15, 2019 at 5:47 PM Simon Peyton Jones via ghc-devs <
> ghc-devs at haskell.org> wrote:
>
> I’m trying to install ‘hspec’ on my WSL (Windows subsystem for Linux)
> system.
>
> But I fail; see below.
>
> For some reason cabal complains about installing a library.  (That seems
> peculiar – isn’t that what cabal is for?)  But it helpfully suggests adding
> –lib.
>
> Alas, cabal then crashes outright, which should never happen.
>
> So I’m stuck.  What should I do?
>
> Thanks
>
> Simon
>
>
>
> simonpj at MSRC-9870733:~$ cabal --version
>
> cabal-install version 3.0.0.0
>
> compiled using version 3.0.0.0 of the Cabal library
>
> simonpj at MSRC-9870733:~$ cabal install hspec
>
> Resolving dependencies...
>
> Up to date
>
> Warning: You asked to install executables, but there are no executables in
>
> target: hspec. Perhaps you want to use --lib to install libraries instead.
>
> simonpj at MSRC-9870733:~$ cabal install --lib hspec
>
> Resolving dependencies...
>
> Up to date
>
> Distribution/Simple/GHC.hs:1959:5-56: Irrefutable pattern failed for
> pattern Just ghcPkgProg
>
>
>
> simonpj at MSRC-9870733:~$ which ghc
>
> /opt/ghc/bin/ghc
>
> simonpj at MSRC-9870733:~$ which ghc-pkg
>
> /opt/ghc/bin/ghc-pkg
>
> simonpj at MSRC-9870733:~$
>
>
>
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
> <https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail.haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-devs&data=02%7C01%7Csimonpj%40microsoft.com%7C49de1a60a36e4a04bbe208d6c1ecdac9%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636909620364700618&sdata=dMUKGqIICFPisw%2Feskzb98WxcG9kfNFMOkZfd9fB7YU%3D&reserved=0>
>
>
>
>
> --
>
> brandon s allbery kf8nh
>
> allbery.b at gmail.com
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20190415/d9b69820/attachment.html>


More information about the ghc-devs mailing list