🐡
Haskellプログラミング環境の一例
はじめに
この記事は、筆者の Haskell プログラミング環境を紹介するものです。選択はすべて、筆者の好みによるもので、善し悪しは判断していません。とはいえ、なれない人の参考にはなるかもしれないので記事にしました。
プロジェクト作成から作成した実行ファイル起動まで
以下のような進め方をするための環境です。
$ stack new sample # sample プロジェクトの開発ディレクトリを構成
$ cd sample # sample のトップに移動
$ gen-hie > hie.yaml # hie.yamlの生成
$ git add .; git commit # 初期状態をローカルリポジトリにコミット
$ code . # VS Code を起動し、package.yaml を編集
$ git diff
executables:
+ first:
+ main: Main.hs
+ source-dirs: app/first
+ ghc-options:
+ - -rtsopts
+ dependencies:
+ - sample
+
sample-exe:
...
$ mkdir app/first # app/first ディレクトリを生成
$ cp app/Main.hs app/first/ # app/Main.hs を app/first/ にコピー
$ stack build # sample.cabal を更新
$ gen-hie > hie.yaml # hie.yaml を更新
$ code . # VS Code を起動し app/first/Main.hs を編集
$ stack build sample:exe:first # first をビルド(~/.ghcup/bin/stack)
$ stack exec -- first # first を起動
プロジェクトディレクトリ
stack new sample
直後
$ tree sample
sample
├── CHANGELOG.md
├── LICENSE
├── README.md
├── Setup.hs
├── app
│ └── Main.hs
├── package.yaml
├── sample.cabal
├── src
│ └── Lib.hs
├── stack.yaml
└── test
└── Spec.hs
3 directories, 10 files
stack exec -- first
直後
sample
├── CHANGELOG.md
├── LICENSE
├── README.md
├── Setup.hs
├── app
│ ├── Main.hs
│ └── first
│ └── Main.hs
├── hie.yaml
├── package.yaml
├── sample.cabal
├── src
│ └── Lib.hs
├── stack.yaml
├── stack.yaml.lock
└── test
└── Spec.hs
4 directories, 13 files
プログラミング環境概要
この記事執筆時点(2024-06-14)で筆者のプログラミング環境は以下のようになっています。
すべて GHCup でインストールしたものです。
- GHCup: 0.1.22.0 (latest,recommended)
- Stack: 2.15.7 (latest)
- HLS: 2.8.0.0 (latest)
- cabal: 3.10.3.0 (latest,recommended)
- GHC: 9.6.5 (hls-powered)
ghcup tui
GHCバージョンの選択
GHCのバージョンは以下の条件で最新のものを選択しています。
- Stackage の LTS に含まれていること
- HLS のサポートがあること
上の条件は、最新のStackageのLTSと最新のHLSを選択すれば、たいていの場合、満たされますが、タイミングによってはどちらかを最新ではないバージョンにしなければならないこともあります。
implicit-hie パッケージ
HLS は hie.yaml の情報を利用します。hie.yaml
が適切に設定されていないと HLS のサポートが適切に受けられません。.cabal
ファイルの情報などを元に hie.yaml
を生成してくれるのが implicit-hie パッケージに含まれる gen-hie
コマンドです。
Discussion