Cabal woes

Simon Peyton Jones simonpj at microsoft.com
Mon Apr 15 22:56:26 UTC 2019


That’s a tremendously helpful summary, thank you Iavor.  And Michail’s summary was also very helpful.

Most of this is doubtless well-known to habitual cabal users, but it might be useful to explain the user model, in a way that covers these points, somewhere close to the Cabal home page.

Simon

From: Iavor Diatchki <iavor.diatchki at gmail.com>
Sent: 15 April 2019 23:39
To: Simon Peyton Jones <simonpj at microsoft.com>
Cc: Brandon Allbery <allbery.b at gmail.com>; ghc-devs at haskell.org
Subject: Re: Cabal woes

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<mailto: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<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwiki.haskell.org%2FCabal-Install&data=02%7C01%7Csimonpj%40microsoft.com%7Ce83dcc16b5a542b8a9b008d6c1f32668%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636909647403187221&sdata=l5Ft4P6VmYcKSMACJWRjQs%2BxeA6LTAj74qTmCakhbPU%3D&reserved=0> 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<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwiki.haskell.org%2FCabal%2FHow_to_install_a_Cabal_package&data=02%7C01%7Csimonpj%40microsoft.com%7Ce83dcc16b5a542b8a9b008d6c1f32668%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636909647403197230&sdata=1uversp%2FCN3h2q0VVmp97WsdnuiHyAl%2B0UfrH0r%2FFek%3D&reserved=0>, which in turn are pointed to from the main Cabal home page https://www.haskell.org/cabal/<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.haskell.org%2Fcabal%2F&data=02%7C01%7Csimonpj%40microsoft.com%7Ce83dcc16b5a542b8a9b008d6c1f32668%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636909647403207238&sdata=1jW3cLEe144ky%2F40Lh4ObiTQQT22TSyhEB03V1Zi09E%3D&reserved=0>.

I must be missing something.

Simon

From: Brandon Allbery <allbery.b at gmail.com<mailto:allbery.b at gmail.com>>
Sent: 15 April 2019 22:54
To: Simon Peyton Jones <simonpj at microsoft.com<mailto:simonpj at microsoft.com>>
Cc: ghc-devs at haskell.org<mailto: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<mailto: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<mailto: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%7Ce83dcc16b5a542b8a9b008d6c1f32668%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636909647403207238&sdata=T7Eo7enHHyPOq5SNk0OFG2PriAX4aUpizF4x1Z4FBbE%3D&reserved=0>


--
brandon s allbery kf8nh
allbery.b at gmail.com<mailto:allbery.b at gmail.com>
_______________________________________________
ghc-devs mailing list
ghc-devs at haskell.org<mailto: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%7Ce83dcc16b5a542b8a9b008d6c1f32668%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636909647403217243&sdata=4blF2DgTxLi%2FNPWWZBbzdOQ6kAiKi6Pqjqm6U1qMEro%3D&reserved=0>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20190415/baf52c2b/attachment.html>


More information about the ghc-devs mailing list