0

0

如何利用vscode进行Haskell函数式编程【教程】

夢幻星辰

夢幻星辰

发布时间:2026-01-17 12:49:59

|

186人浏览过

|

来源于php中文网

原创

必须安装Haskell(haskell.haskell)和CodeLLDB(调试时需)插件,确保已装ghcup或ghc+cabal,HLS启动失败需手动安装并重启VS Code窗口,标准库跳转需ghcup安装GHC源码包,调试须用CodeLLDB配合cabal build且关闭优化。

如何利用vscode进行haskell函数式编程【教程】

VS Code 装什么插件才能写 Haskell

纯靠 VS Code 默认功能写 Haskell 几乎不可行——没有语法高亮、类型提示、自动补全,连 ghci 都没法内嵌启动。必须装对插件,且顺序和配置有讲究。

核心插件只有两个:Haskell(由 Haskell Tool Stack 团队维护,ID 是 haskell.haskell)和 CodeLLDB(仅当需要调试时)。别装网上搜到的旧版 haskellyhaskell-linter,它们已弃用或与新版 haskell-language-server(简称 HLS)冲突。

  • Haskell 插件会自动下载并管理 haskell-language-server(HLS),但前提是你的系统已安装 ghcup(推荐)或至少有 ghc + cabal;否则插件会卡在“Downloading HLS…”且不报错
  • 如果已有 stack 项目,插件默认优先用 stack 启动 HLS;若用 cabal,需在项目根目录放 hie.yaml 显式声明
  • Windows 用户注意:PowerShell 默认执行策略可能阻止 HLS 启动,临时运行 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 可解

打开 .hs 文件后没反应?检查 HLS 是否真在跑

插件图标显示“Haskell”绿色勾不代表 HLS 已就绪。常见现象是:文件打开后无高亮、Ctrl+Click 跳不到定义、悬停看不到类型——本质是 HLS 进程根本没起来,或启动失败后静默退出。

打开 VS Code 命令面板(Ctrl+Shift+P),运行 Haskell: Show Logs,重点看三行:

Starting (haskell-language-server)...
Run entered for haskell-language-server-wrapper(haskell-language-server-wrapper) Version 2.5.0.0 x86_64 ghc-9.6.3
Started language server:haskell-language-server-9.6.3 --lsp

如果日志停在第一行、或出现 Permission denied / exec: "haskell-language-server-wrapper": executable file not found,说明 HLS 未正确安装。此时手动运行:

ghcup install hls
ghcup set hls 2.5.0.0

再重启 VS Code 窗口(不是重载窗口),否则插件仍读缓存路径。

PHP高级开发技巧与范例
PHP高级开发技巧与范例

PHP是一种功能强大的网络程序设计语言,而且易学易用,移植性和可扩展性也都非常优秀,本书将为读者详细介绍PHP编程。 全书分为预备篇、开始篇和加速篇三大部分,共9章。预备篇主要介绍一些学习PHP语言的预备知识以及PHP运行平台的架设;开始篇则较为详细地向读者介绍PKP语言的基本语法和常用函数,以及用PHP如何对MySQL数据库进行操作;加速篇则通过对典型实例的介绍来使读者全面掌握PHP。 本书

下载

怎么让 Ctrl+Click 跳转到函数定义(比如 map 或 Data.List.sort)

默认情况下,标准库函数跳转会失败,因为 HLS 没加载 GHC 的源码。这不是插件问题,而是本地没源码包。

  • ghcup 安装 GHC 时加 --source 参数(如 ghcup install ghc 9.6.3 --source
  • 已有 GHC 但没源码?运行 ghc-pkg list 查看是否有 ghc-9.6.3 对应的 source 行;没有就补装:ghcup install ghc 9.6.3 --source --no-install-ghc
  • 重启 HLS:命令面板中执行 Haskell: Restart Haskell LSP Server,不要只重载窗口
  • 跳转后若显示 “No definition found”,右下角状态栏点 HLS 图标,确认当前加载的是 base 包而非空项目

调试 main 函数时断点不命中?别用 Run Without Debugging

VS Code 内置的 Run Code(Ctrl+F5)或终端里手动跑 runhaskell 都无法触发断点。Haskell 调试依赖 CodeLLDB + 编译产物,必须走编译执行流。

步骤如下:

  • 确保项目有 .cabal 文件(哪怕是最小的 executable 段),否则 CodeLLDB 找不到入口
  • .vscode/launch.json 中配好:"type": "lldb""request": "launch""program": "./dist-newstyle/build/*/x/main/build/main/main"(路径随 cabal 版本变,可用 cabal exec -- which main 查)
  • 断点只能打在 main = do { ... } 内部表达式上,不能打在顶层函数(如 foo x = x + 1)——LLVM debug info 不支持纯函数断点
  • 首次调试前先 cabal build 一次,否则 launch.json 指向的二进制不存在

Haskell 的惰性求值和优化会让某些断点看似“跳过”,关掉优化更可靠:cabal build --ghc-options="-O0 -g"

相关文章

编程速学教程(入门课程)
编程速学教程(入门课程)

编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

412

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

533

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

309

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

385

2023.09.04

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

33

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

59

2025.11.17

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

27

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
go语言零基础开发内容管理系统
go语言零基础开发内容管理系统

共34课时 | 2.5万人学习

第二十三期_前端开发
第二十三期_前端开发

共98课时 | 7.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号