Haskell`cabal`仅“部分”安装软件包

时间:2019-11-20 06:43:25

标签: haskell cabal cabal-install

在Ubuntu Tidal上使用cabal安装名为18:04的Haskell软件包时遇到问题。

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

我不是Haskell专家,并且之前已经花了很多时间来研究这些东西,所以我尝试使用此工具尽可能地重新安装-

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

我会尽可能多地清理与Haskell相关的内容-

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

以及所有Ubuntu旧版Haskell-

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

这样-

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

好,我们走吧-

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

哪个给我-

{...}
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.

让我们设置PATH并进行测试-

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>

到目前为止,一切都很好。现在关注这个-

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

我尝试以下-

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'

然后-

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)

看起来还是可以的,但这是问题开始的地方-

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 ]

嗯-Not installed?还有-

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

Doh。但是,如果我查看~/.cabal,可以看到已经安装了一些东西-

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
{...}

,我什至可以检查安装在~/.cabal/store中的库是否正常工作-

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> 

但是我想使用Tidal及其扩展名-

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

会按以下方式查找软件包,并且需要cabal info tidal返回正确安装的版本-

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

从本质上讲,emacs扩展程序希望该程序包驻留在此处(这将使cabal info tidal正常工作)

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

但是cabal似乎只能“部分”在此处安装软件包-

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

现在,我可能可以修改emacs扩展名,使其指向~/.cabal/store而不是~/.cabal/share,但我希望它可以正常工作,并且cabal info tidal返回正确的版本。

有人能启发我为什么cabal不将文件推送到~/.cabal/share吗?

TIA。

1 个答案:

答案 0 :(得分:0)

按照上面概述的步骤关闭它实际上是“有效的”,只是import itertools def powerset(iterable): s = list(iterable) return chain.from_iterable(combinations(s, r) for r in range(len(s)+1)) x = [1,2,3,4,5,6] ordered_pairs = [[j,k] for j in x for k in x if k>=j] powers = list(powerset(ordered_pairs)) i = [[1,1],[2,2],[3,4],[4,3],[5,6],[6,5]] j = [[3,3],[4,4],[1,2],[2,1],[5,6],[6,5]] k = [[5,5],[6,6],[1,2],[2,1],[3,4],[4,3]] M = [i,j,k] C = [] for n in powers: for a in n: for b in n: for m in M: if a in m: if b in m: if a != b: C.append(n) if len(n) == 1: C.append(n) 社区似乎正在从“旧式”安装过程过渡到“新式”,并且对于新来者来说,区别并不总是很明显。同样,某些软件包的某些部分(尤其是cabal软件包中的tidal.el)尚未更新以反映Tidal安装过程中的更改。谢谢!