DevboxでHaskellプロジェクトを作る
かなり簡単にできたmrsekut.icon
準備物・前提
DevboxとVSCodeを使うことを前提としてる
DevBoxを入れておく
VSCodeにHLSのExtensionを入れておく
Stackを使うかCabalを使うかとかはあまり重視してない
好きなものを使えばいい
どっちかというと、VSCode上でHLSを使うところを重視してる
参考
手順
code:devbox.json
{
"packages": [
"ghc@latest",
"gmp@latest",
"stack@latest",
"cabal-install@latest",
"zlib@latest",
"hpack@latest",
"haskell-language-server@latest"
],
"env": {
"PATH": "$PATH:/usr/bin"
}
}
ポイントは、hlsも入れておくこと
stack, cabalとかは好きなのを使えばいい
ghcupは入れてない
これでghcやstackなどが諸々入る
Stackのプロジェクトを作る
生成されたapp/Main.hsとかを見てもまだHLSが動いてないはず
ここからVSCode上でHLSが動くようにする
devboxのshell上のhlsのpathを調べる
結論言うとこういうの
.devbox/nix/profile/default/bin/haskell-language-server-9.6.6
雑な調べ方
ターミナルの補完が効くなら$ haskell-language-serverとか打って補完してwhichすればいいし
$ which ghcとかから場所を類推してもいい
code:.vscode/settings.json
{
"haskell.serverExecutablePath": "${workspaceFolder}/.devbox/nix/profile/default/bin/haskell-language-server-9.6.6"
}
cmd-pとかでDevbox: Reopenみたいなやつを実行すればいい
1回目にエラーが出ることが多い?2回やるとうまくいく
↑を実行すると、自動的にsettings.jsonにこんな感じで追記がされる
code:settings.json
{
"haskell.serverExecutablePath": "${workspaceFolder}/.devbox/nix/profile/default/bin/haskell-language-server-9.6.6",
"terminal.integrated.profiles.osx": {
"devboxCompatibleShell": {
"path": "/bin/zsh",
"args": []
}
},
"terminal.integrated.defaultProfile.osx": "devboxCompatibleShell"
}
これで、再度app/Main.hsとか見ればHLSが反応してるはず