我第一次设置 Haskell 开发环境的经验是常见的还是一次性的?

rus*_*sln 14 haskell haskell-stack haskell-ide-engine

我决定从 Haskell 开始,但遇到了一个陌生的生态系统。我已经写下了我目前的结论的短版和长版(现在我意识到我遇到的问题可能是暂时的,将来不会适用,并意识到下面的文字可能不适合 SO)。

我现在特别想知道的是

  • 我所描述的设置对退伍军人有意义吗?
  • 为什么 GHC 8.6.5 是推荐版本,而 8.8.2 有什么问题?

简短版本

如果这是您第一次接触 Haskell,并且想要安装 Haskell(ghccup、ghc、cabal-install、stack)和一个由 Visual Studio Code、Haskell 语言服务器插件和 HIE 组成的开发环境。确保stack new按照(https://docs.haskellstack.org/en/stable/README/#start-your-new-project)和您正在安装的 HIE 都解析为由安装的相同版本的 GHC ghcup.

长版

嗨哈斯克勒!

我正在分享我对 Haskell 的尝试,希望能将其他人从一两个新手错误中拯救出来。像我问过 google 的所有明智的人一样how to install haskell,这使我进入了以下页面https://www.haskell.org/platform/(我使用的是 macOS 10.13.6)。我已经按照建议下载了 ghcup,然后又安装了 ghc 8.6.5 和 cabal-install 3.0.0.0。两者都是 ghcup 推荐的版本。我能够ghcup listghcup list -t all一切看起来都很好。 stack是下一个推荐的。这个过程很简单,在堆栈完成它需要做的一切之后,我stack --version告诉我我有
Version 2.1.3, Git revision 0fa51b9925decd937e4a993ad90cb686f88fa282 (7739 commits) x86_64 hpack-0.31.2.

堆栈文档的下一部分让我遇到了麻烦https://docs.haskellstack.org/en/stable/README/#start-your-new-project。专门stack new my-project针对初学者将基于所谓的解析器设置一个新项目。在这一点上我不知道或不关心的是,默认情况下它会使用解析器的 15.2 版本(我写这篇文章时是最新的)来为项目设置一个带有“包含电池”的隔离环境(请纠正我任何错误的假设/术语)。我可能不知道的是,解析器 15.2“期望”找到 ghc 8.8.2,如果没有找到,它会做明智的事情并安装它。我直觉地理解这个问题——这是在解决——然后我继续前进(这是在我发现之前https://github.com/commercialhaskell/lts-haskell#readme)。

转到 IDE,谷歌将我带到尚未准备就绪的 haskell-language-server。下一个最好的事情是haskell-ide-engine,它可以被认为是haskell-language-server 的一部分。我对到目前为止的体验感到天真和满意,因此我从源代码构建 hie,因为此时我对使用 nix 做任何事情或弄清楚 Visual Studio Code DevContainer 是什么都不感兴趣。构建成功,到目前为止我已经安装了 HIE、ghcup、ghc、cabal-install、visual studio 代码包 Haskell Language Server,我准备开始学习 Haskell。除了 HIE 拒绝工作:/。

什么地方出了错?

  • ghcup 在我的机器上安装了 ghc 8.6.5
  • 默认情况下,stack new my-project 使用安装了 ghc 8.8.2 的最新解析器 15.2(与项目隔离)
  • HIE 通过查看 ghcup 安装的 ghc(8.6.5)自行构建(?) 结果是构建 HIE 版本所针对的版本与由stack new my-project. 一旦我更好地理解了所涉及的部分,就很容易在谷歌上搜索解决方案,并迫使我彻底阅读文档。错是我没有更好地关注我正在阅读的文档。然而,我并不准备必须弄清楚生态系统中小而重要的部分的细微差别。

我确实意识到整个情况完全是自己造成的,我可以在安装 GHC 并启动 GHCI 后立即开始学习语言。我想知道是我走错了方向还是大多数人都是这样开始的?

2020 年 7 月 25 日更新

Haskell 语言服务器现在更容易安装,看看这篇文章和它末尾的视频。https://mpickering.github.io/ide/posts/2020-07-10-ghc-libdir.html

jne*_*ira 10

我所描述的设置对退伍军人有意义吗?

haskell 生态系统一开始可能看起来很奇怪(也许它是!)并且开始学习语言基础知识也许最好的选择是您最后评论的内容(例如,data61课程选择的那个)。

我认为问题的关键是大多数haskell 工具都与特定版本的独特haskell 编译器耦合,此外,如果该工具必须解析、格式化或类型检查haskell 源代码(如编辑器和ide 需要做的)。

但是,作为haskell-ide-engine我的合作者之一,我想让初学者尽可能顺利地安装和使用工具。安装可以使用 stack 和 cabal 来完成,但它不是自动的。

您必须stack install.hs latest使用该工具支持的最新 ghc 版本来安装 hie,当前ghc-8.8.2. 您还可以使用stack install.hs hie-${version}fe安装特定版本stack install.hs hie-8.6.5

如果您使用 cabal 安装 hie,安装程序会在其中查找 ghc 版本$PATHcabal-hie-install latest安装找到的最新支持版本。也许您使用 cabal 来安装 hie?

您可以安装HIE的几个版本和每个安装生成几个可执行文件:例如hie本身,hie-8.6以及hie-8.6.5hie-wrapper它通过分析项目,并选择更appropiatehie版本(如果可用)。

不要犹豫,建议如何改进流程。有一些问题是关于: