如何使用 ghcup 设置有效的 Haskell VS Code?

问题描述 投票:0回答:3

我通过

ghcup

安装了 Haskell

我已经通过 ghcup 安装了 HLS

我有

ghcup set 9.6.1

我有 VS Code 扩展:https://marketplace.visualstudio.com/items?itemName=haskell.haskell

当我在 VS Code 中打开项目时,出现以下错误:

Failed to find the GHC version of this Stack project. Error when calling stack setup --silent

到目前为止,我一直在 VS Code 之外的终端中使用 Cabal,例如

cabal build
cabal repl

我注意到 VS Code 正在尝试使用

stack
...如果我尝试在终端中使用 Stack,我会收到如下错误:

$ stack build
Error: [S-9443]
No setup information found for ghc-8.6.5 on your platform.
This probably means a GHC bindist has not yet been added for OS key 'macosx-aarch64'.
Supported versions: ghc-8.10.5, ghc-8.10.6, ghc-8.10.7, ghc-9.0.2, ghc-9.2.1, ghc-9.2.2, ghc-9.2.3, ghc-9.2.4, ghc-9.2.5, ghc-9.2.6, ghc-9.2.7, ghc-9.4.1, ghc-9.4.2, ghc-9.4.3, ghc-9.4.4, ghc-9.6.1

我不知道为什么 Stack 要使用 GHC 8.6.5,或者这是否与 VS Code 扩展遇到的问题有关

不知道到底要做什么,说明很简单 https://www.haskell.org/ghcup/install/#vscode-integration

haskell ghcup haskell-language-server
3个回答
2
投票

此处更详细讨论问题:https://github.com/haskell/vscode-haskell/issues/841

本质上我遇到了一系列问题,有些是因为我试图打开的项目很旧,有些是因为我仍在寻找 ghcup 工具链的方法:

  • 项目是为 GHC (8.6.5) 版本构建的,该版本太旧,无法通过
    ghcup
    安装,因此需要一些配置调整
  • 项目定义了
    .cabal
    stack.yaml
    文件
  • 定义的
    stack.yaml
    ...这代表“堆栈快照”版本。我不完全确定那是什么,我认为这是我在其他语言中使用的包管理器中不存在的概念。我认为这是一组冻结的软件包版本,在这种情况下太旧了,它们只与旧的 GHC 8.6.5 版本兼容,因此无法与我当前尝试使用的 GHC 9.x 一起使用,从而导致错误 - VS代码扩展试图使用它来安装依赖项
    我已经通过 
  • resolver: lts-14.4
  • 安装了最新的 GHC (9.6.1),但显然还无法安装该版本的 Haskell 语言服务器
    
    
  • 因此需要进行一系列修复:

就我而言,我刚刚删除了
    ghcup
  • ...它有一个过时的
    stack.yaml
    并且还定义了:
    resolver
    这似乎阻止 VS Code 安装任何依赖项。
      packages:
      - '.'
    
    似乎没有做任何有用的事情。
    调整了一些依赖版本(从 
  • stack.yaml
  • 中删除上限,以便可以解析与 GHC 9.x 兼容的版本)
    使用
  • build-depends: base >=4.0 && <4.13
  • 最终得到了较旧的GHC 9.2.5,这似乎安装了兼容的HLS版本。
    这是基于我之前在终端中忽略的建议:
    
    ghcup set ghc
    完成所有这些后,重新启动 VS Code 并打开源文件...等待几分钟,它会在后台静默运行。最终智能感知现在可以工作了
  • 我的 VS Code 中仍然有
$ ghcup set 9.6.1 [ Warn ] This is an old-style command for setting GHC. Use 'ghcup set ghc' instead.

"haskell.manageHLS": "GHCup"
,不确定是否需要。
    


0
投票
GHC 版本支持

页面确认了当前 HLS 与 GHC 的兼容性。 要在我的 devcontainer 中安装兼容的 HLS 版本(基于 haskell:9.4.5-slim-buster 映像),我在 dockerfile 中使用了以下内容:

settings.json

将版本指定为
最新

至关重要,没有它,ghcup 安装的 v1.10.0.0 - 已弃用的版本,与 GHC 9.4.5 不兼容!


0
投票

此更改后的语言服务器开始在 Haskell hls 插件的 intellij 环境中工作。

所有其他解决方案都不适合我。我没有解释为什么会出现这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.