HLSがghc9系に対応するようになって、前回のような事態は一時期なりを潜めましたが、今度はVSCode起動時にHLSが起動してくれないという現象に見舞われました。勘弁してくんなまし
記憶で書いてる上にログも書き慣れてないクソ文書ですが生暖かく見てください
環境
- OS: Windows 10
- ghc, cabal, stack: Chocolatey 経由で導入 (下記参照)
- エディタ: VSCode
- プラグイン: Haskell for Visual Studio Code・Haskell Syntax Highlighting
Chocolateyで導入したもの:
- cabal 3.6.2.0 (最新)
- ghc 9.2.3 (最新)
- ghc 9.0.2
- haskell-dev 0.0.1
-
haskell-language-server←おそらく今回の主犯 - haskell-stack 2.7.5 (最新)
現象
VSCodeでHakellプロジェクトを起動すると、起動時に各種セットアップが自動で行われるわけですが、謎の力によってうまくHLSが起動せず、エラーが出て終了する現象が発生しました。
この時コンソール経由でstack init
などを試すと、それはそれで文字コードの違いに起因するエラーやらなんやかんやがでて沼ります。沼りました。沼ると数か月帰ってこれなくなるので先にほかの可能性を考えましょう(真顔)。
個人的な要件
- なるべくバージョン管理を考える場所を減らしたい
- スタンドアロンかつ自動でアップデートチェックしてくれるものはともかく、既にChocolateyとMicrosoft StoreとTexLiveがある現状で、そう何個も何個もバージョン管理するソフトばっかり増やしたくありませんでした。
- TUIモードが使えないならghcup使うメリット半分くらいなくない?
- ghcupは現状、WindowsでTUIモードが使えません(真顔)。 なので先の条件と合わせると、自分の中でChocolateyからHaskell周りだけghcupにするメリットがかなりありません。Chocolateyでできるならその方がコスト少ないんじゃ。
解決方法
1.野放図にインストールされたghcをいったん全てアンインストール (自動除去されずChocolateyToolsやAppDataに残ってしまったものもすべて探し、パスも除去する)
2.haskell-devおよびstackをchocolateyを使って再度導入
> choco install haskell-dev
> choco install haskell-stack
3.別途ghc 9.0.2を導入
> choco install ghc -m --version 9.0.2
4.HLSをChocolateyを使わずに、ビルド済みのバイナリを直接入手して導入する。
5.展開したファイルに含まれている実行ファイルを適当なディレクトリ (D:\HLS
など) に置いて、パスを通す。
まとめ
今回の原因はおそらく、Chocolateyにあるhaskell-language-serverパッケージの更新が最新版に追い付いていないことだと思われます。2022年6月現在でバージョンが1.5.1であり、対応しているghcのバージョンが9.0.1までしかないため、プロジェクト側で要求したghc v9.0.2に対応できずHLSが起動不可能になったものと考えられます。
本当は修正書いてプルリク送れたら最強なんだろうな…