Search code examples
haskellcabalcabal-install

Haskell `cabal` only "partially" installing package


Having problems installing a Haskell package called Tidal, using cabal on Ubuntu 18:04.

https://tidalcycles.org/index.php/Userbase

I'm not a Haskell expert and have borked this stuff a couple of times before, so am trying as fresh an install as possible, using this -

https://www.haskell.org/ghcup/

I clean out as much of the Haskell- related stuff as I can -

justin@justin-XPS-13-9360:~$ rm -rf ~/.cabal/
justin@justin-XPS-13-9360:~$ rm -rf ~/.ghc
justin@justin-XPS-13-9360:~$ rm -rf ~/.ghcup

And also any Ubuntu legacy Haskell -

justin@justin-XPS-13-9360:~$ sudo apt-get remove ghc

So that -

justin@justin-XPS-13-9360:~$ ghci
bash: /home/justin/.ghcup/bin/ghci: No such file or directory

OK let's go -

curl https://get-ghcup.haskell.org -sSf | sh

Which gives me -

{...}
Done installing, run "ghci-8.6.5" or set up your current GHC via: ghcup set 8.6.5
Setting GHC to 8.6.5
Done
Setting GHC to 8.6.5
Done
{...}
Successfully installed cabal-install into
  /home/justin/.ghcup/bin
Detected "/home/justin/.bashrc" on your system...
If you want ghcup to automatically fix your "/home/justin/.bashrc" to include the required PATH variable
answer with YES, otherwise with NO and press ENTER.

YES
OK! /home/justin/.bashrc has been modified. Restart your terminal for the changes to take effect,
or type "source /home/justin/.ghcup/env" to apply them in your current terminal session.

Let's set the PATH and test -

justin@justin-XPS-13-9360:~$ source /home/justin/.ghcup/env
justin@justin-XPS-13-9360:~$ ghci
GHCi, version 8.6.5: http://www.haskell.org/ghc/  :? for help
Prelude>

So far so good. Now following this -

https://tidalcycles.org/index.php/Troubleshooting_a_Tidal_install

I try the following -

justin@justin-XPS-13-9360:~$ cabal update
Downloading the latest package list from hackage.haskell.org
To revert to previous state run:
    cabal v2-update 'hackage.haskell.org,2019-11-20T01:17:49Z'

and then -

justin@justin-XPS-13-9360:~$ cabal new-install tidal --lib
{...}
Starting     tidal-1.4.4 (lib)
Building     tidal-1.4.4 (lib)
Installing   tidal-1.4.4 (lib)
Completed    tidal-1.4.4 (lib)

Still looks OK, but this is where the problems start -

justin@justin-XPS-13-9360:~$ cabal info tidal
* tidal            (library)
    Synopsis:      Pattern language for improvised music
    Versions available: 0.8.2, 0.9.9, 0.9.10, 1.2.1, 1.3.0, 1.4.1, 1.4.2, 1.4.3,
                        1.4.4 (and 99 others)
    Versions installed: [ Not installed ]

Hmm - Not installed ?? And -

justin@justin-XPS-13-9360:~$ ghc-pkg latest tidal
ghc-pkg: cannot find package tidal

Doh. However, if I look in ~/.cabal I can see that some stuff has been installed -

justin@justin-XPS-13-9360:~$ ls -l /home/justin/.cabal/store/ghc-8.6.5/
total 100
{...}
drwxr-xr-x 4 justin justin 4096 Nov 20 06:00 tidal-1.4.4-898a4af91fab9d9d757e1a84104bbd7ca568a77d48b4679a3f4addb65912423a
{...}

and I can even check that the library installed in ~/.cabal/store works properly -

justin@justin-XPS-13-9360:~$ ghci
GHCi, version 8.6.5: http://www.haskell.org/ghc/  :? for help
Loaded package environment from /home/justin/.ghc/x86_64-linux-8.6.5/environments/default
Prelude> :script /home/justin/.cabal/store/ghc-8.6.5/tidal-1.4.4-898a4af91fab9d9d757e1a84104bbd7ca568a77d48b4679a3f4addb65912423a/share/BootTidal.hs
Listening for controls on 127.0.0.1:6010
tidal> :t d1
d1 :: Pattern ControlMap -> IO ()
tidal> 

However I want to use Tidal with its emacs extension -

https://github.com/tidalcycles/Tidal/blob/master/tidal.el

which looks up the package as follows and would require cabal info tidal to return a correctly installed version -

 '(("path" . "ghc-pkg describe $(ghc-pkg latest tidal) | grep data-dir | cut -f2 -d' '")

Essentially the emacs extension wants the package to live here (which would make cabal info tidal work)

/home/justin/.cabal/share/x86_64-linux-ghc-8.6.5/tidal-1.4.4/BootTidal.hs

But cabal only seems to "partially" install the package here -

/home/justin/.cabal/store/ghc-8.6.5/tidal-1.4.4-898a4af91fab9d9d757e1a84104bbd7ca568a77d48b4679a3f4addb65912423a/share/BootTidal.hs

Now I could probably hack the emacs extension to point to ~/.cabal/store rather than ~/.cabal/share, but I would prefer this to work properly and cabal info tidal to return the correct version.

Can anyone enlighten me about why cabal is not pushing files to ~/.cabal/share ?

TIA.


Solution

  • Closing this as the procedure outlined above is in fact "working", it's just that the cabal community seems to be moving from an "old-style" installation process to a "new-style", and that the difference isn't always clear to the newcomer. Also that certain parts of certain packages (notably tidal.el in the Tidal package) haven't yet been updated to reflect the changes in cabal installation procedures. Thanks!