0

我只是不明白。这太令人困惑了。

我知道有ghc-pkg,Cabalcabal-install。这些都是不同的东西。

有人告诉我,安装 haskell-platform 是个坏主意,最好分别安装 ghc 和 cabal-install。我不知道为什么这是一个坏主意。

我发现有一种方法可以使用cabal sandbox init. 但我不知道如何在全球范围内管理包裹。

通过 brew 安装 ghc 和 cabal-install 之后,我的下一步应该是什么?如果我这样做cabal update,它将创建 ~/.cabal 目录,并可能告诉我通过运行来升级 cabal-install
cabal install cabal-install。然后我将不得不删除使用 brew 安装的那个,并添加.cabal/bin到 $PATH,因此cabal将指向更新的那个。那么这是否意味着现在如果我cabal install ghc-mod坐在主目录中运行它会在 ~/.cabal 文件夹中安装库?我的ghc-pkg list指向/usr/local/Cellar/ghc/7.8.3/lib/ghc-7.8.3/package.conf.d,我不喜欢那样。 ghc-pkg list --user指向~/.ghc/x86_64-darwin-7.8.3/package.conf.d,我也不喜欢那样,但也许没关系。无论如何,初始化 ghc-pkg 的正确方法是什么?我应该跑步ghc-pkg init --global | --user还是什么?

你们能告诉我管理全局依赖项的正确方法是什么吗?

  • 可以package.conf.d吗,实际的包位于不同的文件夹中吗?~/.ghc文件夹和文件夹的作用是什么~/.cabal

  • 如何正确卸载软件包?ghc-pkg unregister不删除包,对吗?

    因此,假设您安装了一个与其他软件包的最新版本中断的软件包。说单子控制。假设您这样做cabal install foo --constraint 'monad-control < 1.0.0.0'了,这使它起作用。稍后,您通过运行并从 .cabal/lib 和 package.conf.d 文件夹中物理删除相关文件来删除“foo” ghc-pkg unregister foo(您真的必须手动执行此操作吗?)。然而,你现在仍然有旧版本的 monad-control。有没有办法找到和修剪未使用的包?

  • 你如何检查过时的包裹?

  • 有没有办法将依赖关系视为一棵树?ghc-pkg list给你只是扁平化的包列表。

  • 为什么ghc-pkg check会抛出这样的警告:

    Warning: haddock-interfaces: ~/.cabal/share/doc/x86_64-osx-ghc-7.8.3/haddock-api-2.15.0.1/html/haddock-api.haddock doesn't exist or isn't a file
    

    我知道您可以放心地忽略这些警告,但它们到底是什么意思?

  • 最后,你们不觉得 Haskell 的包装系统有点糟糕吗?我知道没有人应该在没有真正学习的情况下批评某件事,我很抱歉这么说。我是 Haskell 的新手,但我觉得 Haskell 的默认包管理充满了缺点。我想知道是否有更好的选择,我不知道?Haskell 已经存在了很长一段时间,我听说过关于包管理的讨论不应该依赖于具体的包,而应该基于抽象,比如接口。想知道,如果我们很快就会有这种包装系统?或者这只是理论上的学术修辞,直到 2020 年某个时候才会出现?

4

1 回答 1

2

我肯定会推荐安装 Haskell 平台。它可以是一个更新的 PITA(至少在 Mac 上),但它包含电池和许多您通常不会得到的软件包(参见System.Random示例)。

ghc-pkg通常用于列出已安装的软件包。

cabal用于分发haskell包。在实践中,它用于构建可执行文件或安装库。您可以通过创建一个.cabal包含构建/安装可执行文件/库的配方的文件来制作包。

cabal-install是更新的包cabal

沙盒非常重要(它们只附带最新版本的cabal. 它们基本上就像virtualenvpython 一样。通常它们创建一个虚拟环境,您可以在其中安装所需的所有库而不会污染全局系统范围的安装。使用他们你只需要进入你想要构建和调用的项目的根目录,然后你cabal sandbox init就完成了。你可以像往常一样继续使用,,,,,它会自动检测到它在沙箱中. 如果你搞砸了,你可以通过删除沙箱。cabal installcabal buildcabal configurecabal testcabal sandbox delete

于 2014-12-28T08:04:48.960 回答