Haskell環境構築
haskell+devcontainerの環境構築でハマった
まずhaskellだけならfeatures/src/haskell at main · devcontainers-contrib/features · GitHubではいる
がhlsのversionと、stackで使われているghcのversionが合わないといけない
GHC version support — haskell-language-server 2.9.0.1 documentation
いくつか方法がある
❓Dockerfile内でghcupを普通にインストール(2025/06/04時点ではfeaturesの方が良い)
Haskeller のための開発環境構築 on GitHub Codespaces #Docker - Qiita
Dockerfileはghcup-hs/scripts/bootstrap/bootstrap-haskell at master · haskell/ghcup-hs · GitHubを見て設定
ghcupのenv設定も参照
stack install implicit-hie && gen-hie > hie.yaml でhie.yamlを作ると動いた
動いてない!?!?! cannot satisfy -package taskmaster-0.1.0.0(use -v for more information) が出てきた。
Could not load module / Cannot satisfy -package error for exe/test/bench component whose main lib doesn't build or was not built · Issue #366 · haskell/haskell-language-server · GitHub
Intermittent "failed to load packages, cannot satisfy -package <main-lib>" from components other than <main-lib> · Issue #735 · haskell/haskell-language-server · GitHub
1-3 1. HLS をなんとしても動かす|AtCoder ガチ言語 Haskell 🔥
HLS は簡単に動作しないかもしれません。時間的余裕をみて環境構築しましょう。
だよね...
Stackのresolverを中心に組み立てるべきかもしれない(実際にbuildするところなので)
https://www.stackage.org
nightlyにしてたら1夜にして動かなくなってた...
LTSにしたほうが良い絶対
✅Devcontainersのfeatures(2025/06/04時点の正解)
ghcのversionを合わせてみる
code: stack.yaml
resolver: nightly-2024-07-08
code: devcontainer.json
"ghcr.io/devcontainers-contrib/features/haskell:2": {
"globalPackages": "hlint",
"ghcVersion": "9.10.1"
}
だめ...(hlsの起動が失敗する)
というか設定したversionのghcも入っていないし話にならない
✅2025/05/22 Devcontainersに色々fixが入っていたのでリトライ
code: .log
=> internal load metadata for mcr.microsoft.com/devcontainers/base:bul 0.0s
=> context dev_containers_feature_content_source load from client 0.0s
+ Building 638.0s (14/15) docker:desktop-linux
=> auth docker/dockerfile:pull token for registry-1.docker.io 0.0s
=> CACHED docker-image://docker.io/docker/dockerfile:1.4@sha256:9ba7531b 0.0s
=> internal load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> context dev_containers_feature_content_source load .dockerignore 0.0s
=> => transferring dev_containers_feature_content_source: 2B 0.0s
=> internal load metadata for mcr.microsoft.com/devcontainers/base:bul 0.0s
=> context dev_containers_feature_content_source load from client 0.0s
+ Building 638.2s (14/15) docker:desktop-linux
=> auth docker/dockerfile:pull token for registry-1.docker.io 0.0s
=> CACHED docker-image://docker.io/docker/dockerfile:1.4@sha256:9ba7531b 0.0s
=> internal load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> context dev_containers_feature_content_source load .dockerignore 0.0s
=> => transferring dev_containers_feature_content_source: 2B 0.0s
=> internal load metadata for mcr.microsoft.com/devcontainers/base:bul 0.0s
=> context dev_containers_feature_content_source load from client 0.0s
+ Building 638.4s (14/15) docker:desktop-linux
=> auth docker/dockerfile:pull token for registry-1.docker.io 0.0s
=> CACHED docker-image://docker.io/docker/dockerfile:1.4@sha256:9ba7531b 0.0s
=> internal load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> context dev_containers_feature_content_source load .dockerignore 0.0s
=> => transferring dev_containers_feature_content_source: 2B 0.0s
=> internal load metadata for mcr.microsoft.com/devcontainers/base:bul 0.0s
=> context dev_containers_feature_content_source load from client 0.0s
+ Building 638.5s (14/15) docker:desktop-linux
=> auth docker/dockerfile:pull token for registry-1.docker.io 0.0s
=> CACHED docker-image://docker.io/docker/dockerfile:1.4@sha256:9ba7531b 0.0s
=> internal load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> context dev_containers_feature_content_source load .dockerignore 0.0s
=> => transferring dev_containers_feature_content_source: 2B 0.0s
=> internal load metadata for mcr.microsoft.com/devcontainers/base:bul 0.0s
=> context dev_containers_feature_content_source load from client 0.0s
+ Building 638.6s (14/15) docker:desktop-linux
=> auth docker/dockerfile:pull token for registry-1.docker.io 0.0s
=> CACHED docker-image://docker.io/docker/dockerfile:1.4@sha256:9ba7531b 0.0s
=> internal load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> context dev_containers_feature_content_source load .dockerignore 0.0s
=> => transferring dev_containers_feature_content_source: 2B 0.0s
=> internal load metadata for mcr.microsoft.com/devcontainers/base:bul 0.0s
=> context dev_containers_feature_content_source load from client 0.0s
+ Building 638.8s (14/15) docker:desktop-linux
=> auth docker/dockerfile:pull token for registry-1.docker.io 0.0s
=> CACHED docker-image://docker.io/docker/dockerfile:1.4@sha256:9ba7531b 0.0s
=> internal load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> context dev_containers_feature_content_source load .dockerignore 0.0s
=> => transferring dev_containers_feature_content_source: 2B 0.0s
=> internal load metadata for mcr.microsoft.com/devcontainers/base:bul 0.0s
=> context dev_containers_feature_content_source load from client 0.0s
+ Building 639.0s (14/15) docker:desktop-linux
=> auth docker/dockerfile:pull token for registry-1.docker.io 0.0s
=> CACHED docker-image://docker.io/docker/dockerfile:1.4@sha256:9ba7531b 0.0s
=> internal load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> context dev_containers_feature_content_source load .dockerignore 0.0s
=> => transferring dev_containers_feature_content_source: 2B 0.0s
=> internal load metadata for mcr.microsoft.com/devcontainers/base:bul 0.0s
=> context dev_containers_feature_content_source load from client 0.0s
+ Building 639.1s (14/15) docker:desktop-linux
=> auth docker/dockerfile:pull token for registry-1.docker.io 0.0s
=> CACHED docker-image://docker.io/docker/dockerfile:1.4@sha256:9ba7531b 0.0s
=> internal load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> context dev_containers_feature_content_source load .dockerignore 0.0s
=> => transferring dev_containers_feature_content_source: 2B 0.0s
=> internal load metadata for mcr.microsoft.com/devcontainers/base:bul 0.0s
=> context dev_containers_feature_content_source load from client 0.0s
+ Building 639.3s (14/15) docker:desktop-linux
=> auth docker/dockerfile:pull token for registry-1.docker.io 0.0s
=> CACHED docker-image://docker.io/docker/dockerfile:1.4@sha256:9ba7531b 0.0s
=> internal load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> context dev_containers_feature_content_source loa
なんかdevcontainerの構築に鬼の時間がかかる。
まあ、行けた。ちょっと試してみよう。
またハマりそうだったら、haskellまた諦めようかな。
hlsも動いている感動
⏳Haskell + Nix