Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有人解释Haskell软件包管理系统_Haskell_Cabal Install_Ghc Pkg - Fatal编程技术网

有人解释Haskell软件包管理系统

有人解释Haskell软件包管理系统,haskell,cabal-install,ghc-pkg,Haskell,Cabal Install,Ghc Pkg,我就是不明白。这太令人困惑了 我知道有ghc-pkg,还有Cabal和Cabal-install。这些都是不同的东西 我被告知安装haskell平台是个坏主意,最好让ghc和cabal分开安装。我不知道为什么这是个坏主意 我发现有一种方法可以使用cabalsandboxinit在本地文件夹中创建一个沙盒。但我不知道如何在全球范围内管理软件包 在通过brew安装ghc和cabal install之后,我的下一步应该是什么?如果我执行cabal更新,它将创建~/.cabal目录,可能会告诉我通过运行

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

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

我被告知安装haskell平台是个坏主意,最好让ghc和cabal分开安装。我不知道为什么这是个坏主意

我发现有一种方法可以使用
cabalsandboxinit
在本地文件夹中创建一个沙盒。但我不知道如何在全球范围内管理软件包

在通过brew安装ghc和cabal install之后,我的下一步应该是什么?如果我执行
cabal更新
,它将创建~/.cabal目录,可能会告诉我通过运行

阴谋集团安装阴谋集团安装
。然后我必须删除brew安装的,并将
.cabal/bin
添加到$PATH,这样
cabal
将指向更新的。那么,这是否意味着现在如果我坐在home dir中运行
cabal install ghc mod
,它会在~/.cabal文件夹中安装库? 我的
ghc-pkg列表
指向
/usr/local/ceral/ghc/7.8.3/lib/ghc-7.8.3/package.conf.d
,我不喜欢这样。
ghc-pkg-list——用户
指向
~/.ghc/x86\u 64-darwin-7.8.3/package.conf.d
,我也不喜欢这样,但可能没关系。 无论如何,初始化ghc pkg的正确方法是什么?我应该运行
ghcpkginit--global |--user
还是什么

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

  • package.conf.d
    和实际的包放在不同的文件夹中可以吗?
    ~/.ghc
    文件夹和
    ~/.cabal
    文件夹的角色是什么

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

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

  • 如何检查过期的软件包

  • 有没有办法将依赖项视为树<代码>ghc包装清单
只提供扁平的包装清单

  • 为什么
    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年才会显现出来


  • 我绝对建议安装Haskell平台。它可以是一个需要更新的PITA(至少在Mac上是这样),但它附带了电池和许多通常无法获得的软件包(例如,请参阅
    System.Random

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

    cabal
    用于分发haskell包裹。实际上,它用于构建可执行文件或安装库。您可以通过创建一个
    .cabal
    文件来创建一个包,该文件将包含构建/安装可执行文件/库的方法

    cabal install
    是更新
    cabal
    的软件包


    沙箱非常重要(它们只提供了最新版本的
    cabal
    。它们基本上类似于python的
    virtualenv
    。一般来说,它们创建了一个虚拟环境,您可以在其中安装所需的所有库,而不会污染全球系统范围的安装。要使用它们,您只需深入到所需项目的根目录即可t构建并调用
    cabal sandbox init
    ,然后你就完成了。你可以继续使用
    cabal安装
    cabal构建
    cabal配置
    cabal测试
    ,就像你通常做的那样。它会自动检测到它在沙盒内。如果你搞错了什么,你可以删除沙盒box via
    cabal sandbox delete

    你还没有回答我的问题。比如说,我想安装ghc mod以便在Emacs和Sublime文本中使用。它需要全局安装,对吗?或者类似hoogle的东西。你需要创建“全局沙盒”吗对于这些?我不这么认为,对吗?那么管理全局软件包的正确方法是什么?@Agzam删除您迄今为止安装的所有内容。安装Haskell平台。安装您想要的软件包,而不使用沙盒。??利润。不,我不想安装平台。您自己说的-更新它是PITA。写下这个问题我想这有助于我更好地理解这个系统。现在我遇到了一个问题-ghc mod无法安装,似乎问题出在monad日志或monad控件中。我需要尝试用特定的方法安装它constraints@Agzam:除了基本的软件外,您并不想在全球范围内安装其他软件。这是为了降低成本东西坏了会损坏,因为你总是可以清理你的东西