在windows下使用stack配置基于vscode的简易版Haskell开发环境
Haskell的IDE稀少且难以配置,从前天至今日累计花费6小时才成功,以下是配置记录.
参考教程
- (先吐个槽,许多教程漏洞百出, 浪费大家时间, 此处先看我推荐的这些网站, 避免走弯路)
- 蒟蒻中蒟蒻
- 虽是在*nix下的, 但是windows也适用.
- 这篇文章步骤存在一定问题: 在看完全文前请不要提前操作!
- hellmonky
- 这篇文章很不错, 但该篇侧重”Haskell工程项目”的IDE搭建, 与本篇所介绍的”简易版”有所出入.
- 这篇文章适合”使用Haskell创建大型项目”的用户参考, 再次重申, 本文搭建的是”简易版”开发环境.
当前环境
- Windows 10.0.17763
核心步骤
- stack安装
- vscode下Haskell插件5个依赖程序安装
- vscode插件路径配置与hs程序调试
配置流程
- 参考第一篇蒟蒻中蒟蒻
- 安装stack: 点这里进行下载.
- 我个人希望stack自动更新, 所以我默认安装C盘, 想安装在D盘的朋友请看这篇文章
- 我个人喜欢自己操作Path环境变量, 所以安装过程中有2个自动Add Path to C:/sc的选项我没有涂黑勾选, 类似下图这样:

- 设置环境变量: Path里头加入stack.exe所在文件夹,
- 此处设置环境变量意图为: 为stack install提供便利(即不比麻烦地cd到文件夹下)
- 其实你们要是会用listary的话, 直接
- 双击ctrl, 弹出search bar
- exe:stack, 找到这个stack.exe文件
- ctrl+shift+D, 复制文件所在文件夹到剪贴板中
- 在Path中粘贴, 一气呵成.
- 检查cmd下键入stack有没有长长的段落跳出, 有的话执行
stack install和stack upgrade - 需要跳过的选项:
- “使用stack创建你的project”这一栏, stack new, stack setup到stack exec my-project-exe统统不需要!
- 原因: 我们搭建的是”简易版”开发环境, 只需要以下功能:
- ghci能交互式运行
- 在智能提示环境下写好单个hs文件后, 能够运行并调试
- 那个stack new等等是针对一个大型工程的, 我们不需要.
- 原因: 我们搭建的是”简易版”开发环境, 只需要以下功能:
- 跳过换源
- 原因: 同上
- “使用stack创建你的project”这一栏, stack new, stack setup到stack exec my-project-exe统统不需要!
- 直接来到”搭建vscode”这一栏:
- 安装插件: Haskell Syntax Highlighting、Haskell ghc-mod 、haskell-linter、Haskelly;共4个
- 安装插件依赖: ghc-mod、hlint、intero、QuickCheck、stack-run;共5个
- 先安装ghc-mod, 请直接使用这个命令:
stack install ghc-mod --resolver lts-8.24- 有人会问道stack install后我们已经有lts-14, 请放心, 他们会和平共处的
- 安装好ghc-mod之后, stack会自动调用ltf-8.24版本, 此时后面的4个插件hlint、intero、QuickCheck、stack-run一定可以一气呵成安装好!
- 先安装ghc-mod, 请直接使用这个命令:
- vscode插件路径配置
- 新建文件夹HaskellProjects, 加入workplace.
- File-Preference-settings里面搜索haskell.ghcMod.executablePath和haskell.hlint.executablePath两项
- 在ghcMod和hlint下分别直接填写ghc-mod和hlint!
- 设置环境变量: Path里头分别加入hlint.exe所在文件夹和ghc-mod.exe文件夹
- 一般是同一文件夹, 不同就都加一遍
- 此处设置环境变量意图为: vscode会自动读取环境变量中的hlint和ghc-mod, 也就是haskell.ghcMod.executablePath和haskell.hlint.executablePath两项会被自动补全!
- 在HaskellProjects下新建feibonaqi.hs文件
- 代码是:
module Main (main) where
fib :: Int -> Int
fib 0 = 0
fib 1 = 1
fib n = fib (n -1) + fib(n - 2)
main :: IO ()
main = print $ fib 10 - 运行, 成功会返回55.
- 代码是:
- 过河拆桥, 卸载stack
- 原因:
- 两人幸终:
- stack只是一个类似python中的pip程序, 只是一个托管者.在python-pip-vscode三者之间, 显然没有pip不影响python和vscode
- 基于这样的逻辑, stack可以出局, 只要Haskell和vscode两人幸终即可.
- stack工具人身份:
- 依我之见,配置IDE实质:
- 使用ghc解释(或解释)并运行hs程序.
- 利用vscode插件, 对Haskell代码的编写提供智能提示.
- 正因如此, stack仅仅只是用来安装ghc-mod之类的工具人而已
- 依我之见,配置IDE实质:
- 两人幸终:
- 注意事项:
- 不要把compilers也选了, 不然你的ghc.exe会被误杀!
- 卸载选项图示:
- 万一一不小心把compilers也卸载了, 补救办法:
- 此时插件已经齐了, 只是缺少ghc解释器
- 直接安装一个Haskell Platform,ghc会随之安装好,其他不用动
- (需要环境变量就配置一下)
- 原因:
GHCI安装
- 设置环境变量: Path里头加入ghci.exe所在文件夹
- 顺带一提, winghci配色太outrageous了, 建议命令行下直接操作ghci
结论
- 语言可以认为是被不同解释器或编译器所阐释的文本, 核心在解释器–基于这样的意识, 我一开始就知道需要的仅仅是ghc程序.
- 智能提示由插件实现, 插件需要特定依赖–基于这样的意识, 我们借用stack安装好各个插件, 即可实现haskell的智能提示.
感想
- “事不过三” 其实可以解读为: “再困难的问题也超不过3天, 因为3天后你不是解决了就是放弃了.(也可以认为你自己被问题解决了~)”所以类似环境配置这种事, 做所有的事都不必心急, 一天不行就第二天再继续看看, 往往都能3天内得到解决, 解决不了的就暂时认输就好了, 不能总是人去解决问题的呀, 老是这样问题岂不是就很没有面子+(^%=%^)+
