Haskell MOOC on NixOS

Haskell MOOC是我前前后后看了不少书和课程之外,我觉得最最合适的Haskell入门教程。但作为一个NixOS用户,在配环境的时候由于一些陈旧的历史问题会形成一些奇奇怪怪的版本冲突。作为一个新手,我倒觉得没有太多必要深究这背后的深层问题。因为你没有足够的经验根本不可能真正理解本质。把环境配好早点学起来才是正经。

虽然Haskell MOOC给你推荐Stack,都用NixOS了,显然cabal+nix会是一条比Stack更契合nix生态的路,你不用理解,你只要相信我,cabal更好就可以了,而且我们作为初学者也暂时没必要研究shell.nix啥的。

简单来说,不管你是在系统级别还是用户级别安装或者使用shell.nix啥的,我们都需要三个包:ghccabal-installhaskell-language-server

简单来说,cabal-install这个软件包是用来管理haskell项目的。ghc则是编译器。单个Haskell文件可以只需要ghc,但对于项目来说cabal-install是必须的,然后为了让你编辑的时候能有自动补全语法高亮之类的体验,我们还需要lsp:haskell-language-server。我用的是Helix Editor,开箱即用,不需要特殊配置。

然后为了让版本和nixos-unstable里面最新的cabal和ghc一致,所以需要修改一下.cabal(现在cabal必须设置一个特定的版本号而不允许范围了,而且必须放在第一行),以及haskell-language-server能够工作需要把每一次作业的module暴露出来,也要修改tests.cabal文件。

Haskell MOOC上面的指导比较陈旧了,现在早就不用cabal v2 啥了,都是直接cabal build

然后由于NixOS的包直接的奇怪隔离,访问系统的zlib库会有些问题,所以我们需要写一个cabal.project限定一下zlib。

tests.cabalcabal.project文件在此:https://codeberg.org/dzming-li/Haskell-MOOC-on-NixOS