Haskellをはじめる

バージョン管理ツールとしてGHCupというのがある。インストールするとよい。

Haskellで使うツールは大きく分けると4つ
- ghc: コンパイラー(?)
- hls: Language Server
- cabal: パッケージマネージャ(npmのような)
- stack: cabalをラップしたもの
ghcup tui
でツールのバージョンを切り替えることができる。コマンドでも可能だが、tuiの方がわかりやすいかも。

自分はcabalを使うことにした。
stackは困ってからでもいいかなと。

VSCodeで開発がいちおうできる。
いちおう、と言ったのは、どうもExtensionとツールとの連携がうまくできないように見えるから。
Extensionが使うツールを設定する方法として、PATHとGHCupの二つが選択できる。
どっちがよいかはわからなかったが、ターミナルで使ってるバージョンと同じものを使ってほしかったので、PATHを選んだ。
PATHを選ぶと、普通にVSCodeを起動してもパスが反映されなくて、2時間ハマった。ターミナルからVSCodeを起動すれば、PATHが反映される。

2025年8月現在の最新のバージョンは以下のとおり。
✓ hls 2.11.0.0 latest
✓ cabal 3.16.0.0 latest
✓ ghc 9.12.2 latest,base-4.21.0.0
なんだが、これを使うと、Extensionがエラーを出しまくり、さらに2時間ハマる。
素直に、ghcupが出しているrecommendedなバージョンを使おう。
AIに聞いてみると、最新でも大丈夫とかなんとか言うんだけど、おそらくダメ。

> cabal init project-name
でプロジェクトを新規に作れる。
project-name.cabalがpackage.jsonやpom.xmlのようなパッケージ管理用のファイルである。
build-dependsに依存ライブラリをカンマ繋ぎで書く。baseのバージョンはとても重要で、ghcの中に基本ライブラリが含まれているんだが、そのバージョンと合わせないといけない。ghcup listでghcのbaseバージョンをきちんとチェックすること。
default-languageは言語機能がどこまで使えるかが選べる。JavaScriptのES2016とかESNextみたいなものと思えばよい(たぶん)
GHC2024が最新だが、ghcupのrecommendedに合わせると、GHC2021になってしまう。初心者的にはまだまだ興味ないところだと思うけど、新しい言語機能はとりあえずおあずけになる。