ghcup是当前最可靠、最可控的haskell工具链安装方式,可统一管理ghc、cabal和hls,避免版本错配;必须配置中科大镜像源加速国内安装,windows需在powershell中设置环境变量并启用执行策略,安装时勾选hls、指定非c盘路径、自动写入path,vscode中须手动配置haskell.serverexecutablepath路径,且项目根目录需含.cabal或stack.yaml文件才能触发hls。

ghcup 是当前最可靠、最可控的 Haskell 工具链安装方式,比 stack 或旧版 Haskell Platform 更适合 VSCode 集成。它能统一管理 ghc、cabal 和 haskell-language-server(HLS),避免版本错配导致的“有提示但不工作”问题。
用 ghcup 安装并指定中科大镜像源
国内直连官方源极慢甚至失败,必须换源。Windows 用户在 PowerShell(非管理员)中执行:
$env:BOOTSTRAP_HASKELL_YAML = 'https://mirrors.ustc.edu.cn/ghcup/ghcup-metadata/ghcup-latest.yaml' Set-ExecutionPolicy Bypass -Scope Process -Force [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 Invoke-Command -ScriptBlock ([ScriptBlock]::Create((Invoke-WebRequest https://mirrors.ustc.edu.cn/ghcup/sh/bootstrap-haskell.ps1 -UseBasicParsing))) -ArgumentList $true
- 执行后一路按
Enter,关键步骤是安装时勾选HLS(Haskell Language Server),否则 VSCode 启动后无类型提示 - 安装路径建议避开
C:\,例如设为D:\ghcup,避免权限和空间问题 - 务必选“Yes”让
ghcup自动写入PATH,否则 VSCode 终端里ghc --version会报 command not found
VSCode 中手动指定 haskell-language-server-wrapper 路径
即使装了 HLS,VSCode 的 Haskell 插件也常因自动探测失败而静默降级为“仅语法高亮”。解决方法是强制指定可执行文件路径:
- 打开 VSCode 设置(
Ctrl+,),搜索haskell.serverExecutablePath - 填入完整路径,例如 Windows 下是:
D:\ghcup\bin\haskell-language-server-wrapper.exe - Linux/macOS 用户路径类似:
~/.ghcup/bin/haskell-language-server-wrapper - 如果不确定路径,可在终端运行
which haskell-language-server-wrapper或ghcup list查看已安装 HLS 版本对应路径
项目根目录必须含 .cabal 或 stack.yaml
VSCode 的 Haskell 插件依赖项目元数据启动语言服务器。空文件夹或仅含 .hs 文件不会触发 HLS 加载,表现为“悬停无类型、跳转失效、错误不标红”。
- 新建项目推荐用
cabal init(确保已安装cabal)或ghcup install cabal后再执行 - 若已有代码,可在项目根目录手动生成最小
demo.cabal:
name: demo version: 0.1.0.0 build-type: Simple cabal-version: >=1.10 executable demo main-is: Main.hs build-depends: base >=4.7 &&
- 保存后重启 VSCode 窗口(不是重载窗口),或右键
demo.cabal→ “Initialize Haskell project” - 不要用
stack new创建的项目直接开根目录——它默认不含.cabal,需先stack init或手动补全
runhaskell 运行单文件 vs stack exec 运行可执行目标
VSCode 内置终端无法直接识别 cabal run 或 stack run,需配置任务或手动调用。常见混淆点:
- 临时测试单个
Main.hs:终端中直接运行runhaskell Main.hs,无需构建 - 运行已定义的可执行目标(如
.cabal中的executable):必须先cabal build,再cabal exec demo-exe - 用
stack管理的项目:运行前先stack build,然后stack exec demo-exe(名字来自stack.yaml中的executables字段) - VSCode 任务配置中,
command值应为runhaskell或cabal exec,不能写成cabal run(该命令在部分版本中不接受参数)
ghcup install ghc 9.6.4 后必须用 ghcup install hls 9.6.4 匹配安装,差一个小版本都可能导致“服务器崩溃后自动重启”循环。这个细节在初始化项目时最容易被跳过。











