Open6

Haskellをはじめる

上田小次郎上田小次郎

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

上田小次郎上田小次郎

Haskellで使うツールは大きく分けると4つ

  • ghc: コンパイラー(?)
  • hls: Language Server
  • cabal: パッケージマネージャ(npmのような)
  • stack: cabalをラップしたもの

ghcup tui でツールのバージョンを切り替えることができる。コマンドでも可能だが、tuiの方がわかりやすいかも。

上田小次郎上田小次郎

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になってしまう。初心者的にはまだまだ興味ないところだと思うけど、新しい言語機能はとりあえずおあずけになる。