国内如何安装 Haskell 运行环境 (Windows)
文章目录
缘起
对于函数式编程这么多年以来我一直处于一个久仰大名但从未接触的状态,直到最近几年开始折腾 Emacs 、尝试去写 Emacs Lisp 代码的时候,才算是初次伸手触摸到了这个世界。
函数式编程( Functional Programming, FP )把函数作为最重要的组成部分,一切运算都基于函数、归于函数,代码写起来十分优美和有趣。最近刚好有比较多的自由时间,也算是作为初步掌握 Rust 编程后的余兴,我又把比较有名的 Lisp 方言 Clojure 给学习了一下。于是,我心想着既然都学到这种程度了,为什么不直接把更加广为传颂的 Haskell 也学习一下呢?就有了这篇 Blog 。
我开发的平台只有 Windows 和服务器 Linux ,之前有段时间还用过 WSL 但是因为 Windows 再开一个子系统内存占用非常大,而我的笔记本也已经是 6年前的老古董,所以上次重装系统以来就没有开启过 WSL 。服务器 Linux 一般只有涉及到 Unix 编程的时候会用到,跑 HPC 代码的时候会用学校服务器,其他本地开发的情况我只会用到 Windows 平台。
Rust 有多平台的 Rustup ,我本身也安装过 Visual Studio 2022 ,所以能正常编译和运行。 C++ 本来就有微软的 Clang 编译器作支撑,所以也能在 Windows 平台上正常编译运行(结合我最爱的 CMake )。 Clojure 有官方的安装工具,另外它基于的是 JVM 的运行时, JVM 本来就是跨平台的。到了 Haskell 情况变得复杂起来了,我指的并不是 Haskell 编译器不跨平台,相反 Haskell 有非常方便的安装工具 GHCup ,而且这个工具也能正常在 Windows 上运行和安装 Haskell 编译、运行所需要的一切环境。然而,在国内的复杂网络环境下,我硬是折腾到半夜才把 GHCup 的安装问题解决了。
我把安装 GHCup 的过程记录下来,方便有跟我相同烦恼的人能快速完成 GHCup 的安装,也便于之后重装系统或换电脑时参考。
安装过程
准备阶段
为了安装 GHCup (Windows) 你需要准备:
- 一台能联网的电脑,操作系统为 Windows 10/11
- 已经安装并配置好的 Clash For Windows
你需要暂时关闭杀毒软件直到 整个 安装过程结束!
Here We Go!
首先,启动我们的救命工具: Clash For Windows 。打开 Clash For Windows 的系统代理,你需要确保这个代理是真实可用的。然后还需要打开 TUN Mode (打开这个模式来防止一些程序不走代理,为了打开它你可能需要先安装 Service Mode ,可以参考 Clash 官方教程,这里不再赘述)。
然后,打开一个 非管理员权限 的 PowerShell 窗口,添加代理环境变量:
|
|
如图所示,
接着,进入 GHCup 官网 找到 PowerShell 一键安装脚本:
|
|
随便进入一个临时目录,将其中的安装脚本下载到本地:
|
|
然后打开这个安装脚本,将其中会导致错误的一行注释掉重写:
|
|
之后我们就能运行这个安装脚本了:
|
|
刚开始它会让你选择安装的模块和安装位置,这里看个人喜好,安装位置我全部默认,而模块我选择全部安装。
接下来就是耐心的等待它安装结束。成功后会显示:
然后关闭 Clash ,重新打开一个 powershell 窗口查看安装情况。输入
ghcup tui
你会看到 Haskell 模块安装情况:
使用下面的命令创建一个简单项目编译运行试试:
|
|
正常运行:
至此,所有的安装和验证已经结束。
添加 Emacs 支持
因为原本我的 Emacs 就安装了 lsp-mode ,所以为了支持 Haskell 只需要在这基础上加一些配置就可以了。
首先,安装 haskell-mode :
|
|
然后更新 lsp-mode 的配置:
|
|
重启 Emacs ,进入刚刚创建的项目,可以发现 lsp-mode 已经生效了: