PureScript新手常见问题及解决方法:需全局安装purs(npm install -g purescript),确保PATH正确;VSCode跳转失效需启动purs ide server并匹配outputDir;watch模式需指定sources;类型悬停不全可用Show Type命令或手动请求IDE服务。

spago init 后 spago build 报错找不到 purs
这是 PureScript 新手最常卡住的第一步:全局没装 purescript,但 spago 默认依赖它。Spago 本身不带编译器,只负责依赖管理和构建调度。
解决方法很简单:
- 运行
npm install -g purescript(推荐,兼容性好)或用系统包管理器安装(如brew install purescript) - 验证是否成功:
purs --version应该输出类似0.16.2的版本号 - 如果已装但报错,检查
$PATH是否包含 npm 全局 bin 目录(Linux/macOS 可查npm config get prefix,再拼bin路径) - Windows 用户注意:PowerShell 和 CMD 的
$PATH缓存可能不同,装完建议重启终端
VSCode 中按 Ctrl+Click 无法跳转到 Data.Array 等标准库定义
这不是代码写错了,而是 psc-ide 服务没启动,或者没指向正确的 output/ 目录。PureScript 的类型跳转、补全、悬停提示全靠这个后台服务驱动。
手动启动服务并确认配置:
- 在项目根目录下运行:
purs ide server --port 4242 --log-level debug - 确保
--output-directory与spago.dhall中的outputDir一致(默认是"output") - VSCode 必须安装官方
PureScript IDE插件,并在设置中启用purescript.enableIde - 插件默认连
localhost:4242,如果端口被占,需同步修改插件设置里的purescript.idePort
spago build --watch 不触发重编译,或改了文件后类型错误没实时更新
Watch 模式失效通常不是 bug,而是文件监听范围没覆盖到你正在编辑的路径,或者输出目录被意外清空。
排查要点:
-
spago build --watch默认只监听src/**/*.purs和spago.dhall,如果你把模块放在lib/或test/下,得加--sources参数显式指定:spago build --watch --sources "src/**/*" "test/**/*" - 每次
spago build会清空output/并重建,若其他工具(如 Webpack)也在读写该目录,可能造成竞态;建议把output/加入.gitignore,且不要手动删它 - VSCode 插件有时缓存旧的类型信息,遇到“明明改了类型却还报老错”,先关掉
purs ide server进程,再重启插件
调试时想看某函数的完整类型签名,但悬停只显示简略版
VSCode 插件默认只显示推断出的顶层类型,对高阶函数或带约束的类型(比如含 Monad、Eq)容易截断。这时要主动查 IDE 服务返回的原始结果。
两种可靠方式:
- 光标停在函数名上,按
Ctrl+Shift+P→ 输入PureScript: Show Type,会弹出完整签名(包括所有类型变量和约束) - 在终端手动发请求:
echo '{"command":"type","params":{"search":"map","currentModule":"Main"}}' | nc localhost 4242,前提是purs ide server正在运行 - 注意:如果函数未被任何模块导入或使用过,IDE 可能返回
not found—— 先在Main.purs里调用一次再试
真正麻烦的不是配置步骤,而是 IDE 服务和构建工具之间那层隐式状态同步:spago.dhall 改了、output/ 清了、purs ide server 没重启,三者只要一个脱节,类型提示就失灵。建议把启动服务和 watch 构建做成一个简单的 shell 脚本,避免每次手动记命令。


















