【问题标题】:What is the suggested way of setting up Haskell on Archlinux?在 Archlinux 上设置 Haskell 的建议方法是什么?
【发布时间】:2021-04-15 00:41:13
【问题描述】:

长话短说,我想要一些关于让 Haskell 在 Archlinux 上工作的(最佳)方式的指导。

工作我的意思是,就ghci 命令行工具而言,安装我没有的软件包 - 例如vector-spacethis answer 是我的一个问题指 - 以及 Haskell 顽固的学习者可能需要的任何其他内容。

Archlinux wikipage on Haskell 列出了三个(替代?)包以使 Haskell 在系统上运行,即ghccabal-installstack。我在我的系统上安装了第一个和第三个,但我想我一定是后来安装了后者(除非它是 ghc 的依赖项)同时篡改(可能与 Vim as a Haskell IDE 有关)。此外,我安装了大量的haskell-* 软件包(为什么?谁知道呢?作为一个学习者,我一定来过很多次,说呃,让我们试试这个!)。 p>

  • 这些软件包各有优缺点吗?
  • 它们都可以在有/没有冲突的情况下使用吗?
  • 它们中的任何一个是否会使其他任何东西变得多余?
  • 根据我所写的内容,我还应该注意哪些我似乎不知道的事情?

【问题讨论】:

  • ghc 只是编译器; cabal 是一个构建工具,stack 是围绕 cabal 构建的工具,其中包括一个精选的包存储库。它们不是相互排斥的。
  • @chepner,根据您的评论,我推断cabalstack 的依赖项,但我的系统上安装了后者,而不是前者。我错过了什么吗?
  • 许多发行版的标准 Haskell 包通常有点陈旧。如果你可以不使用标准包管理器,也许你可以试试 ghcup haskell.org/ghcup
  • @Enlico Stack 依赖于 Cabal(库),但不依赖于 cabal-install(命令行工具,通常简称为“Cabal”)。有关更多详细信息,请参阅this answer of mine

标签: haskell ghc cabal archlinux haskell-stack


【解决方案1】:

Arch Linux's choice 在他们的包中提供动态链接库往往会妨碍您开发 Haskell 代码。作为一个 Arch 用户,我的默认建议是根本不使用 Arch 的 Haskell 包,而是通过 ghcupStack 安装你需要的任何东西,从各自项目页面中的指南开始。

【讨论】:

  • 所以你的建议是使用pacman 来安装stack 或任何具有相同作用的东西,而不是使用它来安装haskell 包。也许我还应该卸载所有haskell-* 软件包?根据您在评论中链接到我的问题的答案(也因为看起来stack 下载的ghci 比我使用pacman 安装的旧版本),我会选择cabal-installstack。与此相关,您为什么写 ghcup/Cabal 或 Stack 而不是 cabal-install 或 stack?我想我仍然缺少一些东西。
  • [1/2] @Enlico (1) 我的建议是根本不使用pacman,而是通过项目页面中的说明获取工具。甚至 stack package from the Community repository 也提取了很多 haskell-* 包。 (2) 是的,我建议删除您通过pacman 获得的haskell-* 包(和ghcstackcabal-install 等)。
  • [2/2] @Enlico (3) 我说“ghcup [...] 或 Stack”是因为您可以使用 GHC 和构建工具快速设置一个有效的 Haskell 环境。与 Stack 不同,cabal-install 不会为您管理 GHC 版本,因此替代方法是使用 ghcup 和安装 cabal-install。请注意,如果您选择 ghcup,您还可以稍后使用 cabal install stack 获取 Stack。 (4) 对于“ghcup/Cabal”,我真正的意思是“ghcup/cabal-install”。我不会提到阴谋集团与阴谋集团安装的区别不是为了 chepner 的评论。
  • @Enlico 是的,就是这样。
  • @brittAnderson 实际上,这种安排与 XMonad 配合得很好。 (就我而言,我的 ~/.xmonad 中有一个 Cabal 项目,因此 XMonad 的 build 脚本可以在我的 xmonad.hs 上调用 cabal exec ghc。)
【解决方案2】:

你基本上就在那里。请尝试以下操作:

  • ghci:如果你获得了 Haskell REPL,那么它就可以工作。

  • stack ghci: 你应该再次获得 Haskell REPL。 GHC 有很多版本,stack 与库一起管理这些版本。每当您使用新版本的 GHC stack 时,都会下载它并为您创建本地安装。

stack 独立于您的 Linux 包管理器。问题是你的发行版只有它所集成的任何应用程序实际需要的 Haskell 库,一旦你离开这些库,你就会陷入依赖地狱而没有任何支持。所以我建议你避免使用你的发行版 Haskell 包。 stack 可以满足您的一切需求。

如果您从 Linux 包管理器安装了 stack,那么您可能需要卸载它并使用个人副本(即在您的 ~/.local 目录中)。然后你可以随时说stack update 来检查你是否有最新版本。

一旦你拥有stack,通过说stack new my-project simple 创建一个项目。然后进入项目文件夹并开始编辑。如果你真的想要,你可以只使用.hs 文件和 GHC,但这很痛苦; stack 你会做得更好,即使你只是在胡闹。

您还需要一个编辑器。语法高亮等基本功能几乎在所有东西中都可用,但是一旦你通过了河内塔,你就会想要更好的东西。我将 Atom 与 ide-haskell-ghcide 一起使用。这在引擎盖下使用Haskell Language Server,因此您也需要安装它。我知道有很多其他编辑器支持 HLS,但我没有使用过他们的经验。

【讨论】:

  • 将下载它并创建一个本地安装 我猜这是我几分钟前第一次运行stack ghci 时发生的下载。 FWIW,我看到ghci 告诉我GHCi, version 8.10.3,而stack ghci 告诉8.8.4stack --version 是2.5.1),所以似乎Arch 正在下载比stack 更新的编译器版本是的。
  • 堆栈使用“解析器”文件列出库、编译器等的版本。默认情况下,它使用最新的长期支持解析器。见stackage.org
猜你喜欢
  • 2020-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 2012-08-16
  • 1970-01-01
相关资源
最近更新 更多