LoginSignup
3
1

More than 1 year has passed since last update.

WSL2 + nix + stack + VSCodeでghc環境構築(Haskell Language Server版)

Last updated at Posted at 2021-06-29

Haskell環境構築2020簡易版 (macOS, Linux向け)をWSL2 + nix上で動かした。脳死コピペでいけるようにできるだけ行間を埋めたつもりになっている。リゾルバがurlだとうまく動かないように見えるのでそこも修正している。

前提とする環境

  • Windows10 21H1
  • Ubuntu20.04 on WSL2
  • VSCode 1.57.1
  • nix 2.3.13
  • stack 2.7.1
  • ghc 8.10.4
  • Haskell Language Server 1.2.0

1. Windows10のWSL2上にUbuntu20.04を導入

他の記事を参考にしてくりゃれ。多分WSL1でも動くが、WSL1だとnix-env系がクソ重かった。

2. Visual Studio Code導入

VSCodeをインストールしてRemote - WSLを導入する。この拡張はWindows10側に入る。

3. Nix導入

windows terminal等でUbuntu20.04上のシェルを起動して、以下のコマンドを実行する。ここで、Nixはシングルユーザーモードで導入している。WSL1でも動かしたかったため。

$ sh <(curl -L https://nixos.org/nix/install) --no-daemon
$ mkdir -p ~/.local/bin
$ exit

4. stack, ghc, implicit-hie導入

(wsl2のshellを起動しなおす)
$ nix-shell -p stack gmp
$ stack setup
$ stack install implicit-hie

5. Project生成及びVSCode設定・起動

以下、生成するプロジェクト名をmy-project、stackのリゾルバをlts-18.3と仮定する。実際に運用する際は適宜置き換える。

(引き続きnix-shell上で作業)
$ stack new my-project
$ cd my-project
$ echo -e ',s/^resolver/# resolver/\n.\n+s/^/# /\n.\n.a\nresolver: lts-18.3\n.\nw\n'  | ed - stack.yaml
$ (cat stack.yaml && echo -e 'ghc-options:\n  "$locals": -O0 -Wall -haddock\n  "$everything": -haddock') > stack-hls.yaml
$ stack build
$ gen-hie | sed '2a\    stackYaml: "stack-hls.yaml"\n    components:' > hie.yaml
$ code .

VSCodeが起動するので、起動後にHaskell拡張を導入する。この拡張はWSL2側に入る。ついでに勝手にHaskell Syntax Highlightingも自動で入るっぽい?

なお、VSCode側でのビルドの設定は何もしていないので何もない。ビルドタスクなどが欲しい場合は、my_project/.vscode/tasks.jsonをよしなに設定する。ghciのデバッガをvscode上で動かす設定はよくわからない。

問題点

gen-hieする前にstack buildが必要な気がする。気がするだけなので気のせいかもしれない。package.yamlで指定してあるバイナリ名がかっちょよくなかったので変更したところ、どうにもうまく動いていなかったが、stack purgeとかrm *.lock *.cabalしてからstack buildしなおした後にgen-hieするとうまく動いた、ように見える。何もわからない、何も...

new-templateを使うと問答無用でBSD3ライセンスになる。ぼくはMITがよかったのだが、MITに変える方法が手動以外みつからなかったのでBSD3のままやってる。みんなも手作業で適宜よろしく。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1